اطلاعیه

Collapse
No announcement yet.

ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

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

    پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

    نوشته اصلی توسط rt28
    خط b=MSCOmm1.input رو درست کرده بودم ولی خط آخر ارور type mismatch میده

    این برنامه vb.net رو از کجا دانلود کنم؟ یه سرچ زدم یه سری لینک پیدا کردم ولی نمیدونم از کدوم سایت بگیرم که کامل باشه بعدا دردسر درست نکنه.
    بابا شما چه حجم ترافیکه سنگینی دارید :mrgreen:

    نظرم اینه بری بیرون یه دونه بخریش.

    تشکر :smile:
    من میخوام یه فایل رو با ویژوال بیسیک و RS232 بفرستم به میکرو. برای ارسال هم میخوام تو بسته های 60 بایتی ارسال کنم و بعد از هر 60 بایت VBمنتظر بمونه تا یه کاراکتر از میکرو دریافت کنه (میکرو اعلام آمادگی کنه) بعد 60 بایت بعدی رو بفرسته. از دستور CommEvent که استفاده میکنم کلا هنگ میکنه. یعنی not responding میشه که باید ببندمش دوباره بازش کنم.
    دلیلتون از استفاده ی کد commevent چیه؟

    یه چیزه دیگه هم هست تو به صورت طبیعی ارسالت رو انجام بده. اون کسی که باید 60 بایت رو تشخیص بده میکروِ.

    از سخت افزارتون مطمئن هستی؟
    یعنی میتونی یه عدد رو بفرستی و بگیری.؟
    راستی کریستالی که به میکرو وصل کردی، چنده؟
    ?Why not

    دیدگاه


      پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

      نوشته اصلی توسط QUARK
      بابا شما چه حجم ترافیکه سنگینی دارید :mrgreen:

      نظرم اینه بری بیرون یه دونه بخریش.
      نه مشکل ترافیک ندارم
      اگه لینک خوب داری بده

      دلیلتون از استفاده ی کد commevent چیه؟

      یه چیزه دیگه هم هست تو به صورت طبیعی ارسالت رو انجام بده. اون کسی که باید 60 بایت رو تشخیص بده میکروِ.

      از سخت افزارتون مطمئن هستی؟
      یعنی میتونی یه عدد رو بفرستی و بگیری.؟
      راستی کریستالی که به میکرو وصل کردی، چنده؟
      آره سخت افزار مشکلی نداره، اطلاعات رو راحت میگیرم میفرستم. اگه بخوام یه دفعه بفرستم مشکلی نیست. مثلا یه فایل 60 بایتی رو فرستادم. ولی من برنامه رو تنظیم کردم که بسته های 60 تایی بفرسته چون از اون ور از میکرو باید بره یه جای دیگه. مثلا وقتی فایل 70 بایتی میفرستم 60 تای اول رو میکرو میگیره 10 تای بعدی رو میکرو صبر میکنه که بگیره چیزی نمیاد. گفتم حتما مشکل تنظیم زمان داره. البته قاعدتا این مشکل نباید باشه چون من دریافت اطلاعات رو تو میکرو به صورت وقفه تعریف کردم نباید اطلاعات از بین بره.

      راستی کریستالم 11.0592 هه.
      commevent رو تو یکی از فایلهای آموزشی خوندم که vb تو این خط صبر میکنه تا به مقدار Rthreshold کاراکتر از ورودی دریافت کنه.
      منم Rthreshold رو یک گذاشتم از میکرو هم تنظیم کردم که یه کاراکتر مثلا Z اونجایی که لازمه فرستاده بشه.
      ولی vb هنگ میکنه

      گفتم شاید میکرو از vb عقب میمونه تو برنامه vb یه حلقه گذاشتم واسه خودش 1000 تا بشمره. :mrgreen: ولی نشد :NO:

      بعدش رفتم سراغ اینکه مثل بچه آدم یه تابع تأخیر تعریف کنم:
      http://support.microsoft.com/kb/162150

      خوردم به یه ارور دیگه:
      vb6 ambiguous name detected : sleep

      (در حال حاضر دارم روی این ارور کار میکنم :read: )


      اصلا این کدیه که برای ارسال فایل نوشتم


      کد:
      Private Sub Command3_Click()
      Dim Fnum As Long, Flen As Long, i As Long, R As Long, send(61) As Byte, a As Long, RmLen As Long, b As Long, k As Long
      Fnum = FreeFile()
      Flen = FileLen("C:\ghm.txt")
      MSComm1.Output = Chr$(Flen)
      Open "C:\ghm.txt" For Binary As #Fnum
      RmLen = Flen
      b = 61
      i = 1
      Do Until i > Flen
      
        If RmLen < 61 Then
          b = RmLen
        End If
      
        For j = 0 To b
         If EOF(1) = False Then
           Get #1, i, send(j)
           i = i + 1
           a = a + 1
         End If
        Next j
      
      (اینم comEvReceive که البته فعلا غیر فعاله)
                   ' Do Until MSComm1.CommEvent = comEvReceive  
                   ' Loop
      
        For k = 0 To a - 1
         MSComm1.Output = Chr$(send(k))
        Next k
        
        If RmLen > 61 Then
          RmLen = RmLen - 61
        End If
         
        a = 0
      Loop
      
      
      End Sub

      اینم تنظیمات اولیه:

      Private Sub Form_Load()
      MSComm1.Settings = "19200,O,8,1"
      MSComm1.CommPort = 1
      MSComm1.InputLen = 0
      MSComm1.InputMode = comInputModeBinary
      MSComm1.RThreshold = 1
      MSComm1.PortOpen = True


      End Sub

      دیدگاه


        پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232)

        بابا حال میکنی دیگه.
        یه چند گیگ قرض نمیدی به ما. :mrgreen:
        نه لینکه خاصی ندارم.
        ولی پیشنهاده دیگه بازم خودت میدونی .نظرم اینه که بری بیرون تهیه کنی.


        مثلا وقتی فایل 70 بایتی میفرستم 60 تای اول رو میکرو میگیره 10 تای بعدی رو میکرو صبر میکنه که بگیره چیزی نمیاد.
        به نظر میرسه که این 10 بایت دیگه از بین بره چون میکرو انقدرام سریع نیست که اول بیاد 60تای اول رو بگیره و بعد این 60 تا رو بفرسه یه جا دیگه و تازه بیاد 10 تای دیگه رو بگیره.
        منظورم رو که متوجه میشی.؟

        اصلاً احتیاج نیست که از دستوره commevent استفاده کنی.
        هر وقت که میکرو 60 بایت رو گرفت یه پیامی مثله این XXX12XXX$ از میکرو به VB میفرستی و بعد تو VB اینو دریافت میکنی.خب طبیعی با یه شرط ساده میتونی بفهمی که این عدد از میکرو اومده و باید دوباره یه 60تایی دیگه رو ارسال کنی.
        میتونی اطلاعات رو با دستوره comminput دریافت کنی.(البته میدونم که میدونی)

        برای اینکار میتونی یه تایمر بذاری و intervalش رو روی 1 بذاری و این کارایی رو که گفتم و میدونم که میدونی رو تو تایمر قرار بدی.
        بذار اینم بگم که وقتی تایمر شروع به کار میکنه هر بار که به قول خودمون سرریز میکنه میره تو زیر برنامش.


        این چند خطی رو که نوشتم خیلی مهمه و میتونی جوابتو بگیری.
        چون من از اینکارا زیاد کردم تو VB.هییییییییییی پیر شدیم. :mrgreen:
        ?Why not

        دیدگاه


          پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

          البته من خیلی هم نمیدونم :smile: هنوز یکی دو هفته بیشتر نیست دارم با Vb سرو کله میزنم
          حالا کم کم سوالات پدیدار میشه (پیشاپیش از سطح زیر صفر سوالات معذرت میخوام )

          مثل اینا:

          1- دستور MSCOmm1.input = s فقط یک کاراکتر از ورودی رو تو s ذخیره میکنه؟یعنی باید بذارمش تو یه حلقه؟ یا یه دفعه کل رشته ای که مثلا از میکرو میفرستم تو همین یه خط میره تو s ؟

          2- تعریف آرایه به صورت dim a(10) as byte ، (ده رو همینطوری گذاشتم) با تعریف رشته به صورت dim a As string چه فرقی میکنه؟



          دیدگاه


            پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

            مخلصتم هستم عزیزم هر کمکی از دستم بر بیاد واسه پیشبرد پروژت انجام میدم.

            همونطوری که گفتی هرچی بیاد دریافت میکنه.یعنی اگه از میکرو یه عددی به اینصورت بیاد 1222
            تو VB هم اینجوری تو S میشه.s=1222
            ولی اگه تو یه ثانیه 10 تا از اینا بیاد بدیهیه که تو گیرنده هم تو یه ثانیه 10 تا از اینا رو دریافت میکنی.همونطور که میدونی.

            string میتونه رشته باشه یعنی هر چی که میتونی هر چیزی رو توش قرار بدی.مثله:
            "s="Ty%6&*pogf!1
            اما byteمیتونه فقط وفقط یه عدد رو تو خودش جا بده.

            برای کاری که تو میخوای بکنی اصلاً احتیاج به تعریف آرایه نیست.

            یه متغییر از نوع string استفاده میکنی و بس.اطلاعات دریافتی از com رو قرار بده توش.
            حالا اطلاعاتی رو که گرفتی رو باید به قول طرف کالبد شکافی کنی. :mrgreen:

            حالا همینوانجام بده که مهمترین بخشه کار کالبد شکافیه.
            منظورم اینه که وقتی یه داده رو از پورتِ com میگیری به این صورته.
            12ll12ll12ll12ll12ll
            تو مثاله بالا 12 عددی هست که شما ارسال میکنی (از طرف میکرو) و اگه بخوای اینو توی یه تکس باکس نشون بدی میشه این(یعنی همون بالایی)
            ولی به خاطر سرعت بالایی که به کارت میدی(یعنی قرار دادنِ دستورات توی تایمر) دیگه عدد 12 رو نمیتونی داشته باشی.البته اگه هم اینا رو لحاظ نکنی تو دریافت داده از com به این صورت هست12ll.
            اون دوتا خطی رو که میبینی به خاطر اینه که به خط بعدی بره.
            اگه از دستور print s استفاده کنی اینو متوجه میشی.

            اگه تا اینجا رو فهمیدی بگو که بریم سره پیدا کردنه کاراکترِ ارسالی از میکرو توی متغییر تعریف شده توی VB.
            همون کالبد شکافی :mrgreen:
            ?Why not

            دیدگاه


              پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

              قربانت

              اینارو گرفتم
              فقط من یه مشکلی دارم . وقتی از کامپیوتر به میکرو اطلاعات میفرستم کاملا میتونم دریافت کنم ولی وقتی از میکرو به کامپیوتر با دستور putchar داده میفرستم بعضی وقتا میگیره بعضی وقتا دوست نداره بگیره. مثلا یه جا وسط برنامه میخوام یه کاراکتر z رو تو تکست باکس نشون بده ولی انگار نه انگار یه مقدار سر اون خط تأخیر میکنه بعدشم هیچی تو تکست باکس نمیاد
              وقتی putchar رو میذارم تو روتین اینتراپت گیرنده (یعنی هر وقت کاراکتری اومد یه چیزی هم بفرسته) تقریبا درست کار میکنه یعنی بعضی از کاراکتهارو علامت سوال میزنه. مثلا 3تا 3 تا از کامپیوتر داده میفرستم تنظیم کردم که از کد اسکی 48 به بعد رو نشون بده. 123 رو نشون میده بعدش میشه 6؟4 هر سری یه چیزی از قلم میفته. بعد وقتی یه دونه یه دونه اطلاعات میفرستم همه رو درست نشون میده. کلا این دستور putchar دیوونه م کرده oo: تنظیمات خاصی داره؟

              یعنی ظاهرا میگیره ولی روی تکست باکس نشون نمیده.
              راستی وقتی میخوام یه آرایه رو چک کنم مثلا از میکرو "start" رو میفرستم تو رشته B

              اینطوری بنویسم درسته؟
              if B="start" then
              یا باید B رو بذارم تو یه حلقه تک تک چک کنم؟

              دیدگاه


                پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                ربطی به دستورت نداره.
                احتمالا واس اون ارتباطیه که برقرار کردی با com.
                احتمال بروز خطا وجودداره.
                من با بسکام برنامشو نوشته بودم و تا حالا با putchar اینکارو نکردم.ولی بازم میگم فکر نکنم واس دستورش باشه.

                راستی اینایی رو که گفتم امتحان کردی؟
                ?Why not

                دیدگاه


                  پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                  خوب همون دیگه، داشتم سعی میکردم امتحان کنم، ولی دستوری که باهاش میخوام اطلاعات رو به میکرو بفرسته درست کار نمیکنه باید بگردم ببینم ایرادش کجاست.

                  البته تا حالا اطلاعات از میکرو به کامپیوتر فرستادم بین کاراکتهایی که میفرستم یه سری کاراکتر عجیب غریب میومد.

                  حالا دارم روش کار کنم ببینم میتونم اطلاعات رو روی تکست باکس نمایش بدم یا نه ، موفق شدم خبر میدم که بریم مرحله بعد :arrow:

                  راستی یه سوال خارج از vb
                  میشه پایه مثلا TX پورت RS232 رو صفر و یک کرد؟ یعنی غیر از ارسال اطلاعات بخوایم بعضی از وقتا فقط یه led روشن کنیم یعنی ولتاژ پایه رو high نگه داریم. میشه؟

                  دیدگاه


                    پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                    نوشته اصلی توسط rt28
                    میشه پایه مثلا TX پورت RS232 رو صفر و یک کرد؟ یعنی غیر از ارسال اطلاعات بخوایم بعضی از وقتا فقط یه led روشن کنیم یعنی ولتاژ پایه رو high نگه داریم. میشه؟
                    همچنان میکرو به RS232 وصله؟
                    شما میخواید نقشه VB رو بازی کنید.؟
                    اگه آره که باید بگم نه.
                    چون اطلاعات شما بر اساسه یه قائده ی خاصی به صورت سریال وارد میکرو میشه.
                    میکرو همش داره چک میکنه که آیا این قائده برقراره یانه.

                    میتونی به جای وصل کردن به پایه ی RX میکرو به یه پایه ای غیر از این وصل کنید.
                    ?Why not

                    دیدگاه


                      پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                      سلام
                      ببخشید من این چند روز به اینترنت دسترسی نداشتم.

                      من عدد 12 رو از میکرو فرستادم و روی تکست باکس نمایش دادم. البته بین هر دوتا 12 کاراکتر || نیست. یه کاراکتر عجیب غریب دیگه س.

                      حالا چطوری باید رشته ای که از میکرو میاد تو vb تشخیص بدم و بر اساسش برم مرحله بعد؟ :read:

                      تشکر

                      دیدگاه


                        پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                        وقتی رشته رو از میکرو میخونم باید همیشه کاراکتر اولش رو درنظر نگیرم؟ یعنی همیشه اولش یه کاراکتر اضافه داره؟

                        تو vb با چه دستوری میشه یه رشته رو یا یه رشته دیگه مقایسه کرد؟ باید بذارمش تو یه حلقه و دونه دونه چک کنم؟

                        دیدگاه


                          پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                          نوشته اصلی توسط rt28
                          حالا چطوری باید رشته ای که از میکرو میاد تو vb تشخیص بدم و بر اساسش برم مرحله بعد؟ :read:
                          سلام.
                          برای مثال شما همچین دستوری با میکرو میفرستید.
                          rt28,temp36$(البته $ قبله r هست.)
                          شما یه رشته داری که توش عددی متغییر هست(این عدد متغییر رو 36 در نظر بگیر).

                          حالا وقتی که این رشته رو با VB دریافت میکنی امکان داره قبلو بعدش کاراکترهای ناخواسته بیاد که شما میتونید با دستورِ:
                          var=instr(str, "$rt28&quot دنباله کاراکترهای خودتون بگردید.اینم عکسه این دستور که اینجا نمیشه خوب نمایشش داد.


                          که var میتونه یه متغییر از نوع string باشه که موقعیت $rt28 رو پیدا میکنه و داخله متغییر var قرار میده.
                          همینطور str هم از نوع string هست و رشته ی دریافتی شما از com است.

                          حالا ما موقعیت $rt28 رو داریم.میام تو اون رشته دریافتی با آدرسه $rt28 قسمتی رو که میخوایم برش میزنیم.با دستوره:


                          که قسمتی از رشته ی str (اولی) با شروع از کاراکترstr(دومی)ام و طول dio برداشته شده و در متغییر var قرار میگیرد.


                          یه مثال:

                          $rt28,temp36

                          کد:
                          A = MSComm1.Input
                          S = InStr(A, "$rt28,temp")
                          
                          D = Mid(A, S, 2)
                          خب الان عددی که توی متغییر D وجود داره، 36 .

                          وقتی رشته رو از میکرو میخونم باید همیشه کاراکتر اولش رو درنظر نگیرم؟ یعنی همیشه اولش یه کاراکتر اضافه داره؟
                          متاسفانه متوجه سوالت نشدم گلم.

                          تو vb با چه دستوری میشه یه رشته رو یا یه رشته دیگه مقایسه کرد؟ باید بذارمش تو یه حلقه و دونه دونه چک کنم؟
                          نه به حلقه و از این جور چیزا احتیاجی نیست.

                          یه شرط میذاری مثله این:
                          S="QUARK"
                          A="rt28"
                          if a=s then
                          text1.text="similar"
                          else
                          text1.text="different"
                          end if
                          ?Why not

                          دیدگاه


                            پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                            ممنون
                            اینارو تست میکنم به مشکلی خوردم دوباره میام

                            متاسفانه متوجه سوالت نشدم گلم.
                            منظورم اینه هر چیزی که از میکرو ارسال بشه همیشه یه کاراکتر نامفهوم همراهش میاد؟ مثلا نمیشه من "start" رو از میکرو بفرستم به کامپیوتر و به همین شکل تحویل بگیرم؟ یعنی کاراکتر اضافه ای اینور و اونورش نباشه. (البته تا جایی که متوجه شدم نمیشه :nerd: )

                            دیدگاه


                              پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                              نه نمیشه.
                              چون این کاراکترها دو پیام ارسالی رو از هم جدا میکنن.

                              اگه کارایی رو که بالا توضیح دادم انجام بدی مطمئنم به جواب میرسی.
                              حتی وقتی ارسال قطع میشه هم هیچ مشکلی تو VB واست پیش نمیاد.(آخه اطلاع داری که اگه تو VB خطایی پیش بیاد سریع ارور میده.)
                              ?Why not

                              دیدگاه


                                پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                                http://www.eca.ir/forum2/index.php?topic=67271.0

                                به این لینک یه سری بزنید

                                دیدگاه

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