اطلاعیه

Collapse
No announcement yet.

درست کار نکردن یوزارت

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : درست کار نکردن یوزارت

    راستی، چند تا نکته رو فراموش نکن:
    1- قبل از اینکه بخوای داده های جدید رو تو متغیرهایی که تعریف کردی بریزی (چه همون R اصلی و چه این a1 تا a12 های فرعی) بهتره مقدارشون رو برابر "" قرار بدی تا خالی بشن، اینطوری بهتره. تو قسمت وقفه سریال میکرو گیرنده این کارو بکن:
    [code=vb]
    Rxc:
    R = ""
    $timeout = 1000000
    Input r noecho
    Buffer_udr = Udr
    a1 = ""
    .
    .
    .
    a12 = ""
    a1 = left (R , 3)
    .
    .
    .
    a12 = mid (R , 18 , 3)
    Return
    Return[/code]

    2- این نکته به نظرم خیلی مهمه. اونم اینکه اگه تعداد داده های ارسالیت (منظورم یکان دهگان صدگان هرکدوم از متغیرهاییه که میخوای بفرستی) متفاوته و فرضا عدد اولی تو رشتت هم میتونه 1 باشه هم 10 هم 120) اگه بصورت عادی ارسال بشه (یعنی اگه فقط تبدیل به رشته بشه و ارسال بشه) طول رشته ای که فرستاده شده متفاوت خواهد بود، بنابراین وقتی شما تو میکروی دریافت کننده سه کاراکتر اول رو میریزی تو متغیر A1 اگه عدد ارسال شدت 120 بوده کامل دریافت میشه، اگه 10 بوده 10 دریافت میشه به همراه اولین عدد از متغیر بعدی! و اگه یک رقمی باشه اون دریافت میشه به همراه 2 کاراکتر از عدد بعدی!! به همین جهت، تو میکروی فرستنده یه استاندارد سازی بکن و با یه If تعیین کن که اگه تک تک داده ها بین 0 الی 9 بود، قبل 2 تا صفر بخوره و اگه بین 10 الی 99 بود یک صفر و در غیر این صورت خودش باشه. یعنی تو میکروی فرستنده اگه اولین عددت رو تو متغیر B1 به عنوان یه Byte تعریف کردی:
    [code=vb]
    Dim B1 as byte
    Dim Sb1 as String * 3
    if B1 < 10 then
    Sb1 = chr(48) + chr(48) + str(B1)
    end if
    if B1 > 9 and B1 < 100 then
    Sb1 = chr(48) + str(B1)
    end if[/code]
    حالا متغیر Sb1 الی Sb12 رو با هم جمع بزن و بریز تو یه متغیر بزرگتر و با دستور Print همشونو بفرست.

    3- من همیشه برای اینکه دیتایی که تو میکروی گیرنده دریافت میکنم رو چک کنم و از سالم بودن رشته دریافتی مطمئن بشم، به اول رشته و آخرش یه حرف اضافه میکنم و تو میکروی گیرنده چکش میکنم. ببین:
    [code=vb]
    S = chr(83) + Sb 1 + ... + Sb12 + chr(83)[/code]
    تو کد بالا یه حرف S بزرگ به اول و آخر رشته اضافه میشه (طول رشته S حداقل باید به اندازه مجموع رشته های Sb و 2 کاراکتر اضافه شده باشه).
    بعد تو میکروی گیرنده 2 تا متغیر جدید از نوع String با طول 1 تعریف میکنم (مثلا اینجا متغیرهای Check1 و Check2 در ابتدای برنامه Dim شدن) و به این صورت یه If تو وقفه سریال اضافه میکنم تا اگه دیتای دریافتی به هر دلیلی دچار اشکال شد یا نویز گرفت و چیز دیگه ای دریافت شد ازشون استفاده نشه:
    [code=vb]
    Rxc:
    R = ""
    $timeout = 1000000
    Input r noecho
    Buffer_udr = Udr
    a1 = ""
    .
    .
    .
    a12 = ""
    Check1 = ""
    Check2 = ""
    check1 = left (R , 1)
    Check2 = Right(R , 1)
    if check1 = Check2 and check1 = "S" then
    a1 = left (R , 3)
    .
    .
    .
    a12 = mid (R , 18 , 3)
    end if
    Return
    Return[/code]
    البته میتونی بسته به کاری که ازش میخوای و اهمیت صحت داده های ارسالیت به جای این کار از خود دستور Echo استفاده کنی و تو میکروی ارسال کننده هم یه وقفه سریال بذاری تا بعد از دریافت رشته ارسالی خودش، اگه تایید بود مثلا یه OK بفرسته. دیگه خیلی پیچیده و درهم شد، ببخشید
    مرسی
    تشکر نکن، صلوات بفرست:

    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

    دیدگاه


      #17
      پاسخ : درست کار نکردن یوزارت

      نوشته اصلی توسط pars_paya
      آقا خیلی ممنون از توضیحات کاملت ...
      ببین مثلا یه رشته داریم مثل 252A50B3
      که اعداد بین حروف میتونن هر چند رقمی باشند
      چطوری میتونم تیکه رشته های مربوط به هر عدد رو استخراج کنم؟؟
      ممنون میشم اگه یه تیکه برنامه بذاری واسم ...
      بازم ما شرمنده شدیم ....
      ارادتمندم قربان
      نکته 2 توضیحاتی که دادم رو بخون، اگه باز سوالی بود در خدمتم
      تشکر نکن، صلوات بفرست:

      [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

      دیدگاه


        #18
        پاسخ : درست کار نکردن یوزارت

        آقا خیلی ممنون
        یه سری تکنیک خودم بلد بودم و یه سری هم از شما یادگرفتیم ، آخرش سر و ته انتقال دیتا هم اومد ...
        ممنون از همکاریتون ....
        طلبت شد 2 تا ......
        تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
        علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

        دیدگاه


          #19
          پاسخ : درست کار نکردن یوزارت

          نوشته اصلی توسط pars_paya
          آقا خیلی ممنون
          یه سری تکنیک خودم بلد بودم و یه سری هم از شما یادگرفتیم ، آخرش سر و ته انتقال دیتا هم اومد ...
          ممنون از همکاریتون ....
          طلبت شد 2 تا ......
          خوب خدا رو شکر که حل شد :applause:
          نفرمایید مهندس، اگه بحث طلب و بدهی باشه که من 7-8 تایی بدهکارم :mrgreen: اصلا یه کاری، حالا که اصرار داری شما هم اون چندتا تکنیکتو یادمون بده تا بی حساب بشیم :mrgreen: :nice:
          ممنون
          تشکر نکن، صلوات بفرست:

          [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

          دیدگاه


            #20
            پاسخ : درست کار نکردن یوزارت

            نکته اول:
            تا udr خالی نشده ، دیتا بفرستی تو خروجی پرت و پلا خواهی داشت ......
            تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
            علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

            دیدگاه

            لطفا صبر کنید...
            X