سؤال

الخلفية: Windows Server 2003 R2، Wire Service المنفذ المسلسل الظاهري الذي تم إنشاؤه باستخدام برنامج RealPort، الميناء التسلسلي تم تكوينه ك COM5، 9600 باود، 8 بتات بيانات، لا توجد بتات تعادل، 1 بت توقف، لا تحكم في التدفق، باستخدام Rxtx 2.1-7.

تم العثور على منفذ COM5، يتم إنشاء المنفذ التسلسلي باستخدام طريقة Portid.Open ومعلمات المنفذ ومحدد التحكم في التدفق لتتناسب مع إعدادات برنامج تشغيل الجهاز أعلاه. أحصل على SerialPort IntUpstream ولفه في InputStreamReader حتى أتمكن من التحكم في ترميز الإدخال. الترميز الافتراضي هو بالطبع CP1252 لقد قرأت أنه إذا كنت تستخدم 8 بيانات بيانات يجب أن تكون الترميز ISO-8859-1 AKA Latin1. وأنا باستخدام طريقة InputStreamReader: int c= isr.read ()؛ في حين حلقة في حالة serialport.event.data_available طباعة عدد صحيح C، وإلقاء نظرة على حرف ((char) ج)؛ المشكلة هي أن الأرقام والأحرف الناتجة تحولت مرتفعة جدا (المدى 135 - 250) الرسائل كلها تنتهي ب "جميع الحقوق محفوظة)" والأحرف الأخيرة في كل رسالة هي نفسها. ومع ذلك، فإن التحول غير متسق من الشخصية إلى الشخصية. لقد جربت الترميزات الأخرى: UTF8 / UTF-8 تحول الأرقام إلى أعلى. كما يفعل ASCII / US-ASCII. يحول CP1252 الأرقام إلى نطاق 130 - 350 باستثناء 3 أحرف تحولت إلى 65533 و 8222 و 8240. ملاحظة: باستخدام InputStreamReader.getencoding () UTF8 و UTF-8 هي UTF8 و ASCII و US-ASCII هي ASCII.

هل هناك ترميزات أخرى يجب أن أحاول؟ أي شخص آخر شاهد هذا النوع من الأشياء؟

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

المحلول

أنا أقوم تقريبا بالضبط نفس الشيء.9600 باود، 8N1 (8 بتات البيانات، لا تكافؤ، توقف 1 بت) وليس لدينا أي مشاكل مع التحول في الشخصية.نحن لا نضع حتى ترميز، في أي مكان.

دفق الإدخال لدينا هو ببساطة من نوع Inputstream ومحدد مع serialport.getInputstream ()؛

حاول التراجع من InputStreamReader واستخدام "Inputtream" عادي ".يجب أن تهتم الترميز بنفسه.

نأمل أن يساعد بطريقة ما بطريقة

- gmale

نصائح أخرى

لديك اثنين من منافذ خدمة الأسلاك.أنا واحد نشرت حول تحولت إلى تعزز بين تكوين الأجهزة في TCP إلى الجهاز التسلسلي يسمى Digi.كنت قادرا على علاج المشكلة على هذا المنفذ عن طريق تغيير الإعدادات التسلسلية COM5 إلى 9600،7،1،0،0.كان تحويل القيم من المقرر استخدام 8 بت البيانات مقابل 7. هذا بالطبع يعني أنه اضطررت لتغيير علامات المنفذ في التعليمات البرمجية للمطابقة.كان لديك الصحيح في أن القارئ غير ضروري، ومع ذلك فقد ساعدني في الوصول إلى الحل عن طريق مشاهدة تغيير التحول مع الترميز، حتى يتم فزعني على أن عدد قليل من بتات البيانات ستحظى بنفس التأثير.

الآن أبحث عن السحر على المنفذ الثاني.

إعدادات المنفذ الثاني كانت 1200،8،1،0،0 باستخدام 9600 تسبب في أن يكون الدفق في الغالب 0s مع حوالي 128s.

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