اطلاعیه

Collapse
No announcement yet.

کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

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

    کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

    سلام.
    من با برنامه visual c++ 6 با پورت سریال ارتباط برقرار کردم.
    این کار رو با استفاده از CreateFile انجام دادم.

    ولی من نیاز دارم که دریافت داده های ورودی به پورت سریال به صورت وقفه ای باشه، نه اینکه مرتبا از پورت بخونم تا داده دریافت بشه!

    چطور میتونم این کار رو انجام بدم؟؟ :cry:
    اگر انسان از همه خطر ها پرهيز کند ، هرگز راه به جائي نخواهد برد...

    #2
    پاسخ : کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

    منظورتون را از CreatFile متوجه نشدم اما اگه منظورتون قفل کردن برنامه است از Thread می تونید استفاده کنید.
    Difficult But possible
    به اميد ايراني آباد.
    http://art-net.ir

    دیدگاه


      #3
      پاسخ : کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

      منظورم از CreatFile این هست:

      hCom=CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,
      0,
      NULL,
      OPEN_EXISTING,
      0,
      NULL);

      if(hCom==INVALID_HANDLE_VALUE)
      {
      MessageBox("an error occured(in opening port)"
      return FALSE;
      }
      //set dcb
      DCB dcb;
      FillMemory(&dcb,sizeof(dcb),0);
      if(!GetCommState(hCom,&dcb))
      {
      MessageBox("an error occured(on geting state of port)2"
      }
      dcb.BaudRate=CBR_19200;

      dcb.Parity=NOPARITY;

      dcb.StopBits=ONESTOPBIT;
      dcb.ByteSize=8;
      dcb.EofChar=1;
      dcb.EvtChar=0;

      که با استفاده از WriteFile و ReadFile میشه با پورت سریال ازتباط برقرار کرد.
      ولی مشکل اینجاست که برای نوشتن و خوندن باید خودت بگی کی داده رو بخونه!

      من میخوام به صورت وقفه ای باشه، یعنی هر وقت داده روی پورت بود خودش به سیستم وقفه بده و داده رو ذخیره کنه.
      اگر انسان از همه خطر ها پرهيز کند ، هرگز راه به جائي نخواهد برد...

      دیدگاه


        #4
        پاسخ : کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

        یعنی کسی تا حالا با پورت سریال به صورت وقفه ای کار نکرده؟؟
        :cry: :cry2:
        اگر انسان از همه خطر ها پرهيز کند ، هرگز راه به جائي نخواهد برد...

        دیدگاه


          #5
          پاسخ : کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

          سلام آقا پیام
          به صورت وقفه ای که فکر نکنم بشه تو ویندوز ولی می تونی پورت رو منیتوریگ کنی.
          یعنی 1جورایی وقفه نرم افزاری تولید کنی اگه مایلی بیشتر برات توضیح بدم اگر هم مشکلت حل شده که لطفا بذار رو سایت تا دیگران هم استفاده کنن.
          من با مونیتور کردن پورت هیچ مشکلی ندارم ولی با readfile , writefile چرا
          یعنی درست نمی خونه اگه ممکنه برات 1توضیح بده لطفا
          برای انسان های بزرگ بن بستی وجود ندارد!
          چون بر این باورند که:
          - یا راهی خواهم یافت
          - یا راهی خواهم ساخت
          پس...

          دیدگاه


            #6
            پاسخ : کار با پورت سریال با برنامه 6 ++VC به صورت وقفه ای

            فرم وقفه ای از دید برنامه وجود خارجی نداره چون تحت کنترل سیستم عامل هست. در اصل اون خودش با وقفه اطلاعات رو ارسال و دریافت میکنه. اما اگر مشکلت اینه که نمیخوای از Thread برای مدیریت دریافت داده ها استفاده کنی تنها راهی که بنظر میرسه استفاده از فرم OVERLAPPED IO هست. در این حالت که برای ارسال مشکلی نداری. چون در زمانی که از WriteFile استفاده میکنی اطلاعات ارسالی به بافر داخلی نرم افزاری سیستم منتقل میشه. ولی در زمانی که ReadFile انجام میدی اگر اطلاعاتی در بافر وجود نداشته باشه سریعا برمیگرده. قاعدتا باید از سرویس WaitCommEvent بصورت OVERLAPPED استفاده کنی تا بتونی به محض انجام عمل خاصی روی پورت سریال از طریق یک Event متوجه بشی و روال مورد نظر رو صدا کنی.
            البته نوشتن یک کد با این روش کمی دردسر داره و بهترین روش همون استفاده از Thread هست.

            دیدگاه

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