में पूर्ण सीरियल पोर्ट डेटा नहीं पढ़ रहा है। मैं नेट फ्रेमवर्क 4 का उपयोग कर रहा हूं और सी # में सीरियल पोर्ट जीयूआई एप्लीकेशन बना रहा हूं। कुछ मामलों में, serialport वस्तु (बंदरगाह) सभी डेटा प्राप्त नहीं होता है (मैं एक मिश्रित सिग्नल आस्टसीलस्कप के साथ तुलना)सी #
उदाहरण के लिए, कनेक्ट किए गए डिवाइस भेजता है:
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09
मैं प्राप्त कर सकते हैं:
0x00 0x01 0x02 0x03 0x04 0x08 0x09
मैं अलग ही समस्या आ कोड की कोशिश की:
डेटा एक बफर को भरने के लिए प्राप्त घटना का उपयोग करें:
while (port.BytesToRead < expectedSize) { System.Threading.Thread.Sleep(10); waitingLoop++; if (waitingLoop > TimeOut) // wait for a 1s timeout throw new TimeoutException(); } newBytes = new byte[expectedSize]; LengthRead = port.Read(newBytes, 0, newBytes.Length); if (LengthRead != newBytes.Length) throw new TimeoutException(); // or any exception, doesn't matter...
: TimeoutException के कारण इस मामले में,
private void dataReceived(object sender, SerialDataReceivedEventArgs e) {
while (port.BytesToRead > 0){
byte[] newBytes = new byte[port.BytesToRead];
int LengthRead = port.Read(newBytes, 0, newBytes.Length);
Array.Resize(ref newBytes, LengthRead);
System.Buffer.BlockCopy(newBytes, 0, buffer, positionInBuffer, newBytes.Length);
positionInBuffer += newBytes.Length;
}
}
बाइट्स की एक अपेक्षित संख्या के लिए लूपिंग मैंने रीडबफर आकार आकार, टाइमआउट जानकारी बदलने की कोशिश की ... लेकिन कुछ भी काम नहीं करता है। कोई विचार? सॉफ्टवेयर (Xon/XOF) कॉन्फ़िगर
आप सही थे, कुछ बुरा हुआ क्योंकि मुझे SerialError.Overrun मिला। यदि मैं सही ढंग से समझता हूं, तो यह त्रुटि एक हार्डवेयर ओवररन है, है ना? जो द्वारा प्रस्तावित हैंडशेकिंग इस तरह के मुद्दे को हल करने में मेरी मदद कर सकती है? मैं यूएसबी में आरएस 232 (एचडब्लू फ्लो कंट्रोल लाइनों के बिना) को परिवर्तित करने के लिए एफटीडीआई चिप का उपयोग कर रहा हूं लेकिन मुझे यकीन नहीं है कि मैं उस मामले में एसडब्ल्यू फ्लो कंट्रोल का सही ढंग से उपयोग कर सकता हूं। – mgross
नहीं, यह एक नरम ओवररन है, बफर अतिप्रवाह है। आधुनिक मशीनों पर उल्लेखनीय, जब तक आप डिबगिंग नहीं कर लेते। ReadBufferSize बढ़ाएं, अनुरोध करने के लिए हैंडशेक सेट करें। बाद वाले को डिवाइस को हैंडशेकिंग को लागू करने की आवश्यकता होती है, अधिकांश करते हैं। –
ReadBufferSize वर्तमान में 4096 पर सेट है और जब मेरा टाइमआउट अपवाद बंदरगाह आता है बाइट्स टॉरेड वर्तमान में << ~ 800 है। मैंने हैंडशेक को अनुरोध करने के लिए सेट करने की भी कोशिश की लेकिन यह बिल्कुल संवाद नहीं करता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि कंप्यूटर डेटा मांगता है लेकिन मेरे पास हार्डवेयर फ्लो कंट्रोल लाइन कनेक्ट नहीं है, है ना? – mgross