আপনি কী কার্যকারিতা চাইতে পারেন এবং আপনার কত ত্রুটি পরীক্ষা করতে হবে তা নির্ভর করে সিরিয়াল প্রোটোকল লেখার অনেকগুলি উপায় রয়েছে।
আপনি পয়েন্ট টু পয়েন্ট প্রোটোকলগুলিতে দেখেন এমন কয়েকটি সাধারণ জিনিস হ'ল:
বার্তার সমাপ্তি
সবচেয়ে সহজ এএসসিআইআই প্রোটোকলটিতে কেবল বার্তা অক্ষরের ক্রমিকের সমাপ্তি হয়, প্রায়শই \r
বা \n
এন্ট্রি কী হিট হলে এটি মুদ্রিত হয়। বাইনারি প্রোটোকল 0x03
বা অন্য কিছু সাধারণ বাইট ব্যবহার করতে পারে ।
বার্তা শুরু
বার্তাটি শেষ হওয়ার সমস্যাটি হ'ল আপনি নিজের বার্তাটি প্রেরণ করার আগে অন্যান্য বাইটগুলি ইতিমধ্যে কী পেয়েছে তা আপনি জানেন না। এই বাইটগুলি তখন বার্তাটির উপসর্গযুক্ত হয়ে এটিকে ভুলভাবে ব্যাখ্যা করার কারণ হবে। উদাহরণস্বরূপ, যদি আরডুইনো কেবল ঘুম থেকে জেগে থাকে তবে সিরিয়াল বাফারে কিছু আবর্জনা থাকতে পারে। এটি পেতে আপনাকে বার্তা ক্রম শুরু করতে হবে। আপনার উদাহরণে, ^
প্রায়শই বাইনারি প্রোটোকলগুলিতে0x02
ত্রুটি পরীক্ষা করা
যদি বার্তাটি দূষিত হতে পারে তবে আমাদের কিছু ত্রুটি পরীক্ষা করা দরকার। এটি চেকসাম বা সিআরসি ত্রুটি বা অন্য কিছু হতে পারে।
অক্ষর
এটি হতে পারে যে চেকসাম একটি নিয়ন্ত্রণ চরিত্রের সাথে যুক্ত করে, যেমন 'বার্তা শুরু করা' বা 'বার্তার শেষ' বাইট, বা বার্তায় একটি নিয়ন্ত্রণ অক্ষরের সমান মান রয়েছে। সমাধানটি হ'ল পালাবার চরিত্রটি প্রবর্তন করা। আসল ক্যারেক্টারটি উপস্থিত না থাকায় পালানো অক্ষরটিকে পরিবর্তিত নিয়ন্ত্রণের অক্ষরের আগে স্থাপন করা হয়। উদাহরণস্বরূপ, যদি একটি প্রারম্ভের অক্ষর 0x02 হয়, এস্কেপ অক্ষর 0x10 ব্যবহার করে আমরা বার্তায় 0x10 0x12 (বাইট XOR নিয়ন্ত্রণ অক্ষর) হিসাবে বার্তায় 0x02 মানটি প্রেরণ করতে পারি
প্যাকেট নম্বর
যদি কোনও বার্তা দূষিত হয় তবে আমরা একটি ন্যাক বা পুনরায় চেষ্টা বার্তার সাথে পুনরায় পাঠানোর অনুরোধ করতে পারি, তবে যদি একাধিক বার্তা প্রেরণ করা হয় তবে কেবল সর্বশেষতম বার্তাটি আবার পাঠানো যেতে পারে। পরিবর্তে প্যাকেটটি এমন একটি নম্বর দেওয়া যেতে পারে যা নির্দিষ্ট সংখ্যক বার্তার পরে গড়িয়ে পড়ে। উদাহরণস্বরূপ, যদি এই সংখ্যাটি 16 হয়, প্রেরণকারী ডিভাইসটি শেষ 16 টি বার্তা প্রেরণ করতে পারে এবং যদি কোনও রিসিভড ডিভাইস ক্ষতিগ্রস্থ হয় তবে প্যাকেট নম্বর ব্যবহার করে পুনরায় পাঠানোর অনুরোধ করতে পারে।
লম্বা
প্রায়শই বাইনারি প্রোটোকলগুলিতে আপনি একটি দৈর্ঘ্য বাইট দেখতে পান যা প্রাপ্তির ডিভাইসটিকে বার্তায় কতগুলি অক্ষর রয়েছে তা বলে। এটি অন্য স্তরের ত্রুটি যাচাইয়ের যোগ করে যাতে সঠিক সংখ্যক বাইট পাওয়া যায় নি তবে ত্রুটি হয়েছিল।
আরডুইনো নির্দিষ্ট
আরডুইনোর জন্য একটি প্রোটোকল নিয়ে আসার সময় প্রথম বিবেচনাটি যোগাযোগ চ্যানেলটি কতটা নির্ভরযোগ্য। আপনি যদি বেশিরভাগ বেতার মাধ্যম, এক্সবি, ওয়াইফাই ইত্যাদি প্রেরণ করছেন তবে ইতিমধ্যে ত্রুটি পরীক্ষা করা এবং পুনরায় চেষ্টা করা হয়েছে এবং এটি আপনার প্রোটোকলে রাখার কোনও অর্থ নেই। আপনি যদি কয়েক কিলোমিটারের জন্য আরএস ৪২২ ছাড়িয়ে পাঠাচ্ছেন তবে এটি প্রয়োজনীয় হবে। আমি অন্তর্ভুক্ত জিনিসগুলি হ'ল বার্তা শুরু এবং বার্তা অক্ষরের সমাপ্তি, যেমন আপনার আছে। আমার সাধারণ বাস্তবায়ন দেখতে এমন কিছু দেখাচ্ছে:
>messageType,data1,data2,…,dataN\n
কমা দিয়ে ডেটা পার্টস ডিলিট করা সহজ পার্সিংয়ের অনুমতি দেয় এবং এএসসিআইআই ব্যবহার করে বার্তাটি প্রেরণ করা হয়। ASCII প্রোটোকল দুর্দান্ত কারণ আপনি সিরিয়াল মনিটরে বার্তা টাইপ করতে পারেন।
আপনি যদি বাইনারি প্রোটোকল চান, তবে বার্তার আকারগুলি সংক্ষিপ্ত করতে, আপনাকে কোনও ডেটা বাইট যেমন নিয়ন্ত্রণ বাইটের মতো হতে পারে তবে পলায়ন বাস্তবায়ন করতে হবে। বাইনারি নিয়ন্ত্রণের অক্ষরগুলি সেই সিস্টেমে আরও ভাল যেখানে ত্রুটি যাচাই এবং পুনরায় চেষ্টা করার পূর্ণ বর্ণালী পছন্দসই। পেলে লোডটি এখনও চাইলে এএসসিআইআই হতে পারে।