من می خوام از کامپیوتر با ویژوال بیسیک یه سری بایت(مثلا 1000بایت) رو به میکرو بفرستم اما بایستی بدون خطا باشه باید از چه روشی استفاده کنم؟
کد CRC میشه؟
پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا
یک اشتباهی که عموما انجام میشه اینه که فکر میکنیم استفاده از CRC یا checksum به تنهایی تبادل امن اطلاعات رو تضمین میکنه. در صورتیکه اینها فقط کمک میکنن تا شانس فهمیدن این نکته که داده دریافت شده دارای خطا هست افزایش پیدا کنه.
شما میتونی اطلاعات رو در فریم های کوچیک بفرستی (مثلا 10 بایتی) و در میکرو CRC اون رو چک کنی. اگر CRC با اونی که همراه فریم اومده یکی نبود به کامپیوتر اطلاع بدی که دوباره بفرسته. در غیر اینصورت فریم بعدی تا الی آخر.
پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا
فکر نمیکنم.
ولی یک متد راحتتر و نسبتا مطمئن استفاده از checksum و bcc هست. شما میتونی اطلاعاتت رو با هم XOR کنی و به عنوان یک بایت در انتهای هر فریم بفرستی. محاسبه این کد میتونه در هنگام دریافت اطلاعات در وقفه سریال داخل میکرو به سرعت انجام بشه.
پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا
خیلی ممنون از راهنمایی هات.
راستش بهترین روش به نظر خودم اینه:(چون من سرعت بالا نیاز ندارم و دقت 100% خواهد بود)
1.یک بایت رو از کامپیوتر بفرستم(دریافت از میکرو با وقفه)
2.ارسال همان بایت از میکرو به کامپیوتر(دریافت با کامپیوتر با وقفه)
3.چک کردن این دو مقدار با هم.
حالا من مشکلی که دارم اینه که برنامه نویسی VB ضعیف هستم و دستورات وقفه ای رو بلد نیستم(در ضمن نوع ارتباط من فقط 3 سیم RXD TXD GND داره)
چجوری دریافت وقفه ای توی کامپیوتر داشته باشم؟(اینجوری میشه یه بلوک از دیتا رو با یه بلوک مقایسه کرد)
پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا
منطق راحتیه. اماسوتی شدیدی ممکنه بده:
1- شما 1 رو میفرستی.
2- میکرو هم 1 رو میفرسته. ولی بخاطر نویز 2 دست شما میرسه.
3- حالا قراره شما دوباره بفرستی. میکرو از کجا بفهمه این بایت جدید کدوم بایته؟ بایت قبلی که دوباره ارسال شده یا بایت جدید؟
پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا
نه دیگه نمیذارم سوتی بده.
چون من سرعت بالا لازم ندارم و دقت بالا می خوام.این کارو می خوام انجام بدم.
1.یک بایت رو از کامپیوتر بفرستم(دریافت از میکرو با وقفه)
2.ارسال همان بایت از میکرو به کامپیوتر(دریافت با کامپیوتر با وقفه)
3.چک کردن این دو مقدار با هم.اگه درست بود یه بایته دیگه ارسال میشه مثلا 13 و اگه اشتباه ff.
4.اگه درست باشه بایت جدید و اگه اشتباه بود تکرار بایت قبلی.
قبول دارم که سرعت 3 برابر کم میشه(اگه بلوکی بفرستیم تا 2 برابر کم میشه) اما دقت 100% خواهد بود.این ایده منه شاید روش بهتری هم باشه اما من بلد نیستم.اگه شما تجربه ای دارین لطفا بگین؟
For I = 1 To 10
SendByte( Data(I) )
Next I
SendByte( SendBCC )
Loop Until RecvByte() = 5
End Sub
در این صورت اگر 10 بایت مربوطه توسط میکرو درست دریافت بشه میکرو بایت 5 رو میفرسته و در غیر اینصورت مثلا بایت 15 رو. اینجوری میشه تا 600 کیلو بایت هم دیتا فرستاد.
توی میکروش هم فعلا یه کمی فسفر بسوزونین تا بعد.
توضیح: من بیسیک بلد نیستم. با این مثلا کد فقط خواستم متد رو شرح بدم.
پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا
با درود.
توی برنامه شما 10 بایت دیتا و یک بایت تشخیص خطا (xor ده بایت دیتا) ارسال شده است.(تا اینجا درست)
مشکل من در VB هنگام دریافت اون 5 هست که میکرو میفرسته .
آیا شما اونو با رویداد On_com در Mscomm گرفتین و به صورت وقفه ای بوده؟یا اینکه با تایمر مدام پورت رو می خونین؟
دیدگاه