كيف يمكنني تكوين المنفذ التسلسلي والتواصل معه؟[مغلق]

StackOverflow https://stackoverflow.com/questions/3049

  •  08-06-2019
  •  | 
  •  

سؤال

أحتاج إلى إرسال واستقبال البيانات عبر الاتصالات التسلسلية (RS-232 وRS-422).

كيف أقوم بإعداد مثل هذا الاتصال والتواصل معه؟كيف يمكنني معرفة إعدادات التكوين (على سبيل المثال؟معدل الباود) يجب أن يكون وكيف يمكنني ضبطها؟

على وجه الخصوص، أتطلع إلى القيام بذلك في Java أو C/C++ أو أحد إصدارات Unix الرئيسية ولكن لدي أيضًا بعض الاهتمام بالبرمجة التسلسلية باستخدام Windows/Hyperterminal.

هل كانت مفيدة؟

المحلول

بناء آلة الزمن والعودة إلى عام 1987؟هو هو.

حسنًا، لا مزيد من التعليقات اللاذعة.

كيف يمكنني معرفة إعدادات التكوين (على سبيل المثال؟معدل الباود) يجب أن يكون...

قراءة ورقة البيانات؟حسنا حسنا.على محمل الجد، آخر واحد.إذا كنت لا تعرف معدل الباود للجهاز الذي تحاول الاتصال به، فلديك خياران.ابدأ بالتخمين، أو ربما قم بإخراج نطاق O.إذا كنت بحاجة إلى نقطة بداية جيدة، فاسمح لي أن أقترح عليك 9600-8-N-1.أشك في أنه يمكنك الوصول إلى هناك بالقوة الغاشمة بسرعة نسبية.هناك خيار ثالث يتمثل في وجود نينجا من المدرسة القديمة يمكنه معرفة معدل الباود الفعلي من خلال نظرة الأحرف المشوشة عند بعض معدلات الباود القياسية.من المؤكد أنها خدعة رائعة للحفلات.

نأمل أن يكون لديك حق الوصول إلى هذه المعلومات.في نظام التشغيل Unix/Linux، يمكنك الحصول على Minicom للعب بالمنفذ التسلسلي مباشرة.هذا من شأنه أن يجعل عملية التعرف على التكوين سريعة إلى حد ما.

واحدة من قذائف يونكس الرئيسية

في Unix، يتم تعيين المنفذ (المنافذ) التسلسلية في ملف /dev/ subdir.ttyS0، على سبيل المثال.إذا قمت بإعداد معدل البث بالباود الصحيح وما لا يستخدم minicom، فيمكنك أيضًا نقل الأشياء إلى هذا الملف لإرسال الأشياء إلى هناك.

بالنسبة إلى جوهر السؤال، يمكنك الوصول إليه برمجيًا من خلال رؤوس POSIX.termios.h هو الأكبر.

يرى: http://www.easysw.com/~mike/serial/serial.html#3_1 (لا يعد متوفرا)

ولكن لدي أيضًا بعض الاهتمام بالبرمجة التسلسلية باستخدام Windows/Hyperterminal.

Hyperterminal وminicom هما في الأساس نفس البرنامج.أما بالنسبة لكيفية تمكين Windows لك من الوصول إلى المنفذ التسلسلي، فسأترك هذا السؤال لشخص آخر.لم أفعل ذلك في Windows منذ أيام Win95.

نصائح أخرى

إذا كنت تريد البرمجة بلغة Java فإنني أوصي بشدة باستخدام SerialIOs منفذ تسلسلي.إنه سهل الاستخدام للغاية ويوفر عليك أيام العمل.لم أجد مطلقًا مكتبة مفتوحة المصدر بجودة SerialIO، حقًا!

نصيحتي:لا تستخدم إطار عمل IO التسلسلي لشركة Sun!إنه من عام 1998 ومليء بالأخطاء.يمكنك استخدام com.rxtx لكن السيرياليو أفضل!

بالنسبة لـ C/C++ على نظام التشغيل Windows، لديك (على الأقل) خياران:

  1. استخدم فئة SerialPort التي يوفرها .NET.
  2. استخدم Win32 API.هناك مقالة MSDN واسعة النطاق يعود تاريخها إلى عام 1995، والعديد من المكتبات والأمثلة المجانية على الويب لتبدأ بها.

سيكون خيار .NET أسهل بكثير.

إذا كان يجب أن يكون عبر النظام الأساسي، فإنني أقترح النظر إلى Boost اسيو.

في العمل نستخدم teraterm وrealterm للتحقق من تنسيق البيانات التسلسلية بشكل صحيح.لدينا أيضًا مقسم أجهزة مزود بمفتاح حتى نتمكن من مراقبة حركة المرور إلى تطبيقنا عبر كابل يعود إلى منفذ آخر.

يتيح لك Windows الوصول إلى المنفذ التسلسلي عبر CreateFile.يمنحك ذلك مقبضًا ومن هناك يمكنك تكوين الوصول.

منذ فترة، كتبت تطبيقًا بحجم مناسب لتوجيه الاتصالات من مجموعة من أجهزة المودم إلى عنوان شبكة TCP/IP.

في البداية بحثت عن مكتبة Serial IO غير مرتبطة (مجانية).لقد جربت Sun's وIBM's وRxTx.لقد كانوا جيدين في تطوير التطبيق، وفي الاختبار الأولي، ولكن في الإنتاج أثبت كل منهم أنه غير مستقر.

أخيرًا دفعت مقابل SerialPort الخاص بـ SerialIO.كان التحويل حرفيًا بمثابة تمرين لتغيير الواردات، وكانت المكتبة كذلك قطعاً صخرة صلبة - لا أستطيع أن أوصي به بما فيه الكفاية.يعمل تطبيقي في الميدان على مدار الساعة طوال أيام الأسبوع منذ عامين، دون أن يواجه العديد من العملاء مشكلة واحدة.

إذا بدأت التطوير باستخدام SerialPort، فسيكون لديهم واجهة برمجة تطبيقات أفضل وسأستخدمها.

إذا كنت بحاجة إلى دعم عبر الأنظمة الأساسية، فإن Java مع SerialPort هو أفضل خيار يمكنني العثور عليه.

وأخيرًا، يعد ترخيصهم معقولًا جدًا طالما أنك لا تقوم بتثبيت البرنامج مسبقًا على الجهاز لعميلك (عملائك).

من ناحية أخرى، إذا كنت تريد القيام بذلك باستخدام لغة C#، والتي سيتم تشغيلها على كل من نظامي التشغيل Windows وLinux - مع بعض محددات (يحرر:والتي قد تكون قديمة.ليس لدي أي وسيلة لاختبار ذلك.)فقط قم بإنشاء منفذ تسلسلي كائن، قم بتعيين معدل الباود والمنفذ وأي إعدادات فردية أخرى، واتصل به مفتوحًا، واكتب البايتات[] الخاصة بك.بعد كل عملية الإعداد، يعمل كائن SerialPort بشكل مشابه جدًا لأي دفق متصل بالشبكة، لذلك يجب أن يكون من السهل اكتشافه.

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

اعتمادًا على الجهاز الذي تحاول الاتصال به، قد يكون هناك معلمات أكثر من معدل البث بالباود وعدد بتات البيانات ونوع التحقق من التكافؤ وعدد بتات التوقف التي يجب مراعاتها.إذا كنت أتذكر بشكل صحيح، تستخدم أجهزة المودم تسعة أسطر من واجهة RS-232C.قد تستخدم بعض الأجهزة، مثل أجهزة تسجيل النقد، اتصال الأجهزة على خطوط RTS/CTS أو على خطوط DTR/STR.

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

إذا لم تكن مجبرًا على استخدام مترجم معين، أقترح عليك استخدام Qt وفي الإصدار 5.3 الجديد ستجد فئة مخصصة للمنافذ التسلسلية:

http://qt-project.org/doc/qt-5/qserialport.html

سيتم تشغيل الكود الذي ستكتبه على جميع منصات Qt المدعومة، على الأقل تلك التي تحتوي على منافذ تسلسلية.

لقد كنت أستخدم purejavacomm:إنه تطبيق لـ javax.com مكتوب بلغة Java + JNA النقية

على عكس rxtx، لا تحتاج إلى تثبيت ملف dll.إنه مكتوب بلغة Java + JNA النقية، مما حل بالنسبة لي مشكلة إمكانية النقل بين Windows وLinux.من المفترض أن يكون من السهل النقل إلى أنظمة تشغيل أخرى تدعمها JNA، مثل Solaris وFreeBSD، لكنني لم أجربه.

قد تتوقع أن تتخلف مكتبة جافا خالصة عن التنفيذ الأصلي مثل rxtx في الأداء، ولكن مع وحدات المعالجة المركزية الحديثة، من المحتمل جدًا أن يكون عنق الزجاجة هو معدل البت للمنفذ التسلسلي، وليس دورات وحدة المعالجة المركزية.كما أن تصحيح الأخطاء أسهل كثيرًا من مكتبة Java/Native المختلطة أو التعليمات البرمجية الأصلية المجمعة تمامًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top