هل من الممكن التحكم بمستوى منخفض في RS232 (Com-Port) RTS/CTS/DTR/DSR؟

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

سؤال

أتساءل عما إذا كان من الممكن التحكم في خطوط المصافحة RS-232 مباشرة من win32 (C-API القديم) وكيف.

أرغب في التفاعل مع قطعة خارجية من الأجهزة، وسيكون خطي البيانات البسيطين كافيين لاحتياجاتي.

إذن - هل هناك واجهة برمجة تطبيقات لـ win32 تسمح لي بقراءة وكتابة حالة خطوط الحالة الأربعة؟في الاتصال التسلسلي العادي، يتم تشغيل خطوط المصافحة بواسطة UART تلقائيًا (إذا تم تمكين مصافحة الأجهزة).

أتذكر أنه كان تافهة تحت DOS.كان على المرء فقط برمجة UART مباشرة.هل نجت هذه الوظيفة في win32 بطريقة أو بأخرى؟

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

المحلول

ويمكنك التحكم RTS و DTR باستخدام SetCommState(). يمكنك أيضا وضع الامور أن يكون الجهاز أو الأجهزة flowcontrol التعامل مع السائق (CTS و / أو DSR)، أو يمكنك وضع الامور باستخدام SetCommMask() حتى تحصل على الأحداث عندما تتغير تلك الإشارات.

لمحة لائقة هنا هو: http://msdn.microsoft.com/ أون لنا / مكتبة / ms810467.aspx

لاحظ أن Win32 والمسلسل API بالاتصالات و / أو سائق يمكن أن يكون صعب، حتى تكون مستعدة لفعله بعض التصحيح ما يجري على السلك.

نصائح أخرى

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

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

هل مايكروسوفت تفعل في الواقع الأجهزة المصافحة الآن؟ لسنوات عديدة NT، نظامي التشغيل Win2000 وXP لم يفعل المصافحة في الأجهزة. بدلا من ذلك عندما وصلت FIFO نقطة معينة برنامج تشغيل الجهاز سيغير خط سنت يدويا. وهو ما يعني أنها كانت بسيطة بشكل لا يصدق أن يتسبب برنامج تشغيل الجهاز إلى فقدان البيانات، والاستيلاء على نافذة مع الماوس وتفعل دوائر حول الشاشة على سبيل المثال (التأكد من أن تأخذ هذا الإطار من الجانب الأيسر من الشاشة على كل أو بعض الممرات ). على Alt-Enter لاتخاذ موجه الأوامر ل/ من ملء الشاشة وطريقة سهلة ليتسبب في فقدان البيانات. أو أي شيء آخر أن يسبب ما يكفي من الكمون المقاطعة. في الأساس مايكروسوفت أجهزة التحكم في التدفق ليست الأجهزة ولكن التحكم في التدفق البرمجيات، حتى لو كانت الأجهزة لديها السائقين تدفق الأجهزة قدرات التحكم برامج Microsft للم الإعداد الذي قليلا. لم مستوى سطح البحر في نهاية المطاف دعم هذا الشيء، وكذلك سورتا، كان عليك أن تضع الإعدادات لا علاقة لها الحق في SetCommState () لتمكينه.

وبقدر ما برنامجك السيطرة على الإشارات، استخدام SetCommState ().

وهناك بعض USB لمحولات المسلسل التي لا تدعم التحكم في التدفق DTR / DSR / DCD. لذلك قد تكون هذه هي قضيتك.

http://www.digi.com/support/kbase/kbaseresultdetl؟ معرف = 588

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