125 kbit / s पर अधिकतम CAN बस फ्रेम (संदेश) की दर क्या है?


19

मेरा कैन बस 125 kbit / s पर चल रहा है और विशेष रूप से विस्तारित फ्रेम प्रारूप का उपयोग कर रहा है। मैं जानना चाहूंगा कि CAN फ्रेम की अधिकतम दर क्या है जिसे मैं बाहर भेज सकता हूं। मान लीजिए कि डेटा की लंबाई हमेशा आठ बाइट्स होती है।

इस विकिपीडिया पृष्ठ के अनुसार , प्रत्येक फ्रेम में (1+11+1+1+18+1+2+4+64+15+1+1+1+7) = 128बिट्स की अधिकतम फ्रेम लंबाई होती है:

यहां छवि विवरण दर्ज करें

न्यूनतम तीन बिट्स इंटरफ्रेम स्पेसिंग को ध्यान में रखते हुए , 125 केबी / एस के तहत अधिकतम पैकेट दर होनी चाहिए: 125000 / ( 128 + 3) = 954फ्रेम प्रति सेकंड।

लेकिन मेरे परीक्षण में, मैं उस उच्च को प्राप्त नहीं कर सका। अधिकतम फ्रेम दर जो मैं प्राप्त कर सकता हूं (सभी आठ बाइट्स डेटा के साथ) प्रति सेकंड 850 फ्रेम के आसपास है।

यहाँ क्या गलत है - मेरी गणना, या मेरी परीक्षा विधि?


इसे एक दायरे से देखें और देखें कि आपको वास्तव में क्या मिल रहा है। शायद आपका हार्डवेयर एक भेजे जाने के तुरंत बाद एक नए फ्रेम को प्रसारित करने के लिए तैयार नहीं है। इसके अलावा, क्या आप एसीके समय को ध्यान में रख रहे हैं? बिट्स की आपकी अनलिस्टेड राशि हमें यह बताने में मददगार नहीं है कि आप वास्तव में क्या गिन रहे हैं।
ओलिन लेट्रोप

व्यवहार में, ACK समय और इंटरफ़्रेम रिक्ति की आवश्यकता के कारण CAN बस में किसी भी विस्तारित समय के लिए 100% बस उपयोग प्राप्त करना कठिन है। आपका CAN नियंत्रक किसी भी विस्तारित लंबाई के लिए 100% बस उपयोग का समर्थन करने में सक्षम नहीं हो सकता है।
ट्रिस्टन सीफर्ट

2
आपके द्वारा भेजे जा रहे डेटा के आधार पर, बिट स्टफिंग आपके फ़्रेम का आकार 10% तक बढ़ा सकती है।
WhatRoughBeast

1
@xiaobai - नहीं, डेटा फ़ील्ड की लंबाई बदलती है। एक लिंक के रूप में, आपने पहले ही प्रदान कर दिया है। पूरा पेज पढ़े यदि आपके परीक्षण सभी शून्य या सभी को भेज रहे हैं, तो यह बहुत कुछ समझाएगा।
व्हाट्सएप

1
ACK संचरण समय को प्रभावित कर सकता है यदि आप इसके लिए जिम्मेदार नहीं हैं। फिर, आपके नंबरों की गैर-सूचीबद्ध गड़बड़ हमें यह नहीं बताती है कि आप वास्तव में क्या जोड़ रहे हैं, और इसलिए आप क्या गायब हो सकते हैं।
ओलिन लेट्रोप

जवाबों:


19

ओलिन लेट्रोप के सुझाव के अनुसार, मैं बिट-स्टफिंग पर विस्तार करूंगा।

एनआरजेड कोडिंग का उपयोग कर सकते हैं, और इसके लंबे समय तक चलने या शून्य होने से खुश नहीं हैं (यह घड़ी के किनारों का ट्रैक खो देता है)। यह बिट-स्टफिंग द्वारा इस संभावित समस्या को हल करता है। संचारण करते समय, यदि यह 5 क्रमिक लोगों के रन का सामना करता है या शून्य इसे अन्य ध्रुवीयता का एक सा सम्मिलित करता है, और जब प्राप्त होता है, यदि यह 5 क्रमिक लोगों का सामना करता है या शून्य इसे बाद के बिट को अनदेखा करता है (जब तक कि बिट पिछले के समान नहीं होता है बिट्स, जिस स्थिति में यह एक त्रुटि ध्वज जारी करता है)।

यदि आप अपने परीक्षण डेटा के लिए सभी शून्य या सभी को भेज रहे हैं, तो 64 समान बिट्स की एक स्ट्रिंग के परिणामस्वरूप 12 स्टफ बिट्स की प्रविष्टि होगी। इससे फ्रेम की कुल लंबाई 140 बिट तक बढ़ जाएगी, जिसमें 874 फ्रेम / सेकंड का सर्वश्रेष्ठ-केस फ्रेम दर होगा। यदि डेटा बिट्स CRC के MSB के समान हैं, तो आपको वहां एक और भरा हुआ बिट मिलेगा, और फ्रेम दर 868 फ्रेम / सेकंड तक गिरती है। यदि सीआरसी में लंबे समय तक रन या शून्य होते हैं, तो इससे फ्रेम दर और भी कम हो जाएगी। आपके विचारकों पर भी यही विचार लागू होता है।

कुल 16 भरवां बिट्स 850.3 फ्रेम / सेकंड की एक आदर्श फ्रेम दर का उत्पादन करेंगे, इसलिए आपको इस पर विचार करना चाहिए। एक त्वरित परीक्षण बारी-बारी से बिट्स के साथ परीक्षण डेटा का उपयोग करना होगा, और देखें कि आपके फ्रेम दर का क्या होता है।


3
हां, मेरे मूल परीक्षण में पेलोड और आईडी में वास्तव में बहुत सारे शून्य हैं। यह सुनिश्चित करने के बाद कि डेटा या आईडी में कोई 5 क्रमिक शून्य नहीं हैं, अब मैं 940 फ्रेम / सेकंड प्राप्त कर सकता हूं , गणना की सीमा के बहुत करीब। महान जवाब के लिए बहुत बहुत धन्यवाद।
पेंघे गेंग

1

ओलिन बिट स्टफिंग के अपने विवरण के साथ सही है और यह कि सैद्धांतिक कैन थ्रूपुट पर प्रतिकूल प्रभाव डाल सकता है। एक और चीज जो सैद्धांतिक से वास्तविक थ्रूपुट को और भी नीचा दिखा सकती है, वह है विलंबता। यहां तक ​​कि अगर आपका CAN नियंत्रक 100% बस उपयोग को प्राप्त करने में सक्षम है, तो होस्ट प्रोसेसर उस दर पर Tx और / या Rx को संभालने में सक्षम नहीं हो सकता है। यह धीमे प्रोसेसर और / या अक्षम फर्मवेयर का परिणाम हो सकता है जो CAN स्टैक को लागू करता है।


1

आपके द्वारा बनाई जा सकने वाली सबसे छोटी 2.0a (मानक) फ़्रेम 47bit है ... आपके द्वारा बनाई जा सकने वाली सबसे छोटी 2.0b (विस्तारित) फ़्रेम 67 बिट्स है ... जो कि अंतर-फ़्रेम रिक्ति के 3बिट्स को सम्मिलित करती है, और सिद्धांत रूप में बिट स्टैकिंग को शामिल करती है ... हम एक फ्रेम का निर्माण कर सकते हैं जो कभी सामान नहीं करेगा; वास्तव में, बिट स्टफिंग काफी होने वाली है!

CANBus 2.0a / b के लिए अधिकतम बॉड 1Mbit है।
1Mb / S पर, एक एकल (प्रमुख / आवर्ती) बिट 1uS लंबा है, अर्थात। 0.000'001 एस
तो एक 67 बिट फ्रेम [सबसे छोटा सैद्धांतिक 2.0 बी फ्रेम] को संचारित करने में 67uS लगेगा - एक और (67 बिट) फ्रेम प्रसारित होने से पहले।
1'000'000 / 67 14,925 पूर्ण फ्रेम (+ अगले फ्रेम के 25 ग्राम) देता है

जैसा कि आप उस गति के 1/8 वें भाग पर चल रहे हैं, आप पैकेट के
अधिकांश 14/925 / 8 = 1'865 फ्रेम / सेकंड @ 125Kb पर प्राप्त कर सकते हैं।

जब तक आप डेटा के सभी 64 बिट्स (8bytes) का उपयोग कर रहे हों, और मान लें कि आपने लगातार 1 या 0 के
1'000'000 / (67 + 64) - 7'633
7 'के तार होने से "त्रुटियों" को थोड़ा सा भरा नहीं है । 633/8 = 954

और यह भी कि आपकी वायरिंग सही है। क्या आपकी बस 120ohm UTP केबल से बनाई जा सकती है और दोनों सिरों पर कैपेसिटिव रूप से डिकॉउन्ड की गई है? या एक छोर पर 120ohm रोकनेवाला के साथ कुछ यादृच्छिक तार?

कुल मिलाकर मैं कहूंगा कि आप 90% सैद्धांतिक अधिकतम थ्रूपुट पाने के लिए बहुत अच्छा कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.