اطلاعیه

Collapse
No announcement yet.

ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

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

    ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

    سلام من می خوام برنامه ای بنویسم با زبان c++ که یک مقدار دابل را با پورت سریال از یک کامپیوتر به یک کامپیوتر دیگر بفرستد و به درستی دریافت کند
    لطفا اگه کسی چنین کدی داره یا می تونه راهنمایی کنید

    #2
    پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

    در کد زیر یک عدد float (4 بایتی)ارسال میشه

    char* chptr;
    .
    .
    .
    chptr=(char*)&myfloat;
    putchar(*chptr);
    chptr++;
    putchar(*chptr);
    chptr++;
    putchar(*chptr);
    chptr++;
    putchar(*chptr);

    چون بایت با آدرس کمتر ابتدا ارسال میشه در طرف دیگه 4 بایت دریافت و به تعداد لازم شیفت داده میشه (اولین بایت هیچی؛ دومین بایت یک بایت شیفت داده میشه و ...)
    و در آخر 4 بایت به هم چسبونده میشن مثلا با اپراتور or و بعد tpecast میشن به float
    این راه اصولیش هست راه های دیگه هم هست که میشه انجام داد

    دیدگاه


      #3
      پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

      ممنون از پاسختون
      در مورد دریافتش ، وقفه یا برنامه انتظار برای دریافت اطلاعات باید چی کار کرد

      دیدگاه


        #4
        پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

        لطفا کسی کمک کنه
        در مورد دریافت اطلاعات از پورت rs232 بین دو تا کامپیوتر در زبان c++ باید چی کار کنم

        دیدگاه


          #5
          پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

          شما باید اطلاعات مختصری راجه به انواع داده ها در کامپایلر مورد نظرتون داشته باشید. متغیر اعشاری ممیز شناور دو نوعه: یکی با دقت تکی یا single یا float که 4 بایت حافظه اشغال می کنه، و دیگری با دقت مضاعف یا double که 8 بایت حافظه می گیره.
          ساده ترین راه ارسال باینری اعداد اعشاری اینه که محدوده مورد نظر رو مشخص کنی، عدد رو ضرب در یک مقیاس بزرگ کنی و بعد به شکل عدد صحیح بفرستی. سمت گیرنده هم کافیه عدد صحیح دریافتی رو بر مقیاس تبدیل کنی. مثلاً اعداد بین 30 تا 30- که ضرب در 1000 بشه و تا سه رقم اعشار دقت داشته باشه.
          اگر همچنان به ارسال خودِ متغیر اعشار مُصر هستید، از راهی که دوستمون اشاره کردند باید استفاده کنید. به این صورت که یه اشاره گر از نوع تک بایتی (char یا uchar) تعریف کنید و آدرس متغیر مورد نظرتون رو بهش تخصیص بدید. بعدش 4 بار (برای float) یا 8 بار (برای double) محتوای اشاره گر رو به پورت سریال بفرستید و اشاره گر رو اضافه کنید.
          این مثالش (برای float که 4 بایته):
          کد:
          char* p_char;
          float x_f;
          .
          x_f=1.23;
          .
          p_char= (char*) &x_f;
          for(int i=0; i<4; i++)
             sendbyte(*p_char++);
          در گیرنده برعکس عمل کنید:
          کد:
          char* p_char;
          float x_f;
          .
          p_char= (char*) &x_f;
          for(int i=0; i<4; i++)
            {
             *p_char = getbyte();
             p_char++;
            }
          
          // Now 'x_f' has a valid number.
          بیایید با Google آشتی کنیم!

          دیدگاه


            #6
            پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

            خیلی ممنون از پاسختون
            اگه برنامه ای برای ارسال و دریافت اطلاعات هم دارید لطفا برام بفرستید

            دیدگاه


              #7
              پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

              نوشته اصلی توسط gholamaligolabi
              خیلی ممنون از پاسختون
              اگه برنامه ای برای ارسال و دریافت اطلاعات هم دارید لطفا برام بفرستید
              خواهش می کنم.
              اون قسمت دیگه کارِ شماست
              بیایید با Google آشتی کنیم!

              دیدگاه


                #8
                پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

                بازم سلام
                این کارو وقتی داخل یک کامپیوتر انجام میدم دابل به دست اومده درسته ولی وقتی ارسالش می کنم توی کامپیوتر دوم از 8 بایت بایت اول اشتباه ارسال میشه ولی بایت های دوم و سوم و چهارم اکثرا دقیق ارسال میشه و بایت های آخر تقریبا رندم است و در مجموع جواب درست به دست نمیاد
                روش دیگه ای هست یا راهی برای درست کردن این مشکل ممنون

                دیدگاه


                  #9
                  پاسخ : ارسال یک مقدار دابل با پورت سریال و دریافت آن با کامپیوتر دیگر

                  نوشته اصلی توسط gholamaligolabi
                  این کارو وقتی داخل یک کامپیوتر انجام میدم دابل به دست اومده درسته
                  یعنی چی "داخل یک کامپیوتر"؟! از پورت سریال استفاده می کنید آیا؟!

                  نوشته اصلی توسط gholamaligolabi
                  روش دیگه ای هست یا راهی برای درست کردن این مشکل ممنون
                  شما یک پورت سریال لازم دارید که اعداد موجود در 8 بایت حافظه رو به ترتیب می فرستید برای گیرنده. چیزِ عجیب غریبی نیست که انقدر بزرگش می کنید! اول ارتباط سریال رو چک کنید و همه جور عددی روی اون بفرستید تا مطمئن بشید درسته. بعدش هم برنامه تون رو خوب دیباگ کنید. این کار شدنیه، راه حلش رو بهتون گفتیم.
                  من شونصد بار از این روش برای ارتباط باینری استفاده کردم و مشکلی نداشتم مگر در سخت افزار پورت سریال یا خطاهای برنامه نویسی که هر دو قابل رفع هستند.
                  بیایید با Google آشتی کنیم!

                  دیدگاه

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