اطلاعیه

Collapse
No announcement yet.

مشکلات در Visual Studio

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

    مشکلات در Visual Studio

    با سلام خدمت دوستان

    من دارم رو یک نرم افزار ارتباط با پورت سریال کار میکنم و یک سری مشکلات دارم که خواستم با کمک دوستان حل بشه
    بیشترم با این نرم افزار خیلی خوب ویژال استدیو مشکل دارم (تازه نصبش کردم)

    من ارتباط رو برنامه شو نوشتم ارسال و دریافت میکنه ولی یک مشکل دارده
    من از ظهر الاف این مشکلم
    من میخوام تو ویژوال استدیو ارسال دریافت دیتام به صورت دسیمال انجام بشه یا به صورت باینری
    الان ارسالم اسکی دریافتم اسکی اینجوری حجم دیتای ارسالیم زیاد میشه مثلا میخوام عدد 3 رو بفرستم باید 33 رو بفرستم که هرکدومش 1 بایت

    این مشکل اولم هست تا مشکلات بعد
    راستی کدم اینه
    کد:
    Private Sub writeButton_Click(sender As Object, e As EventArgs) Handles writeButton.Click
    
        SerialPort1.Write(inputTextBox.Text & vbCr) 'concatenate with \n
      End Sub
    برای دریافت
    کد:
    Private Sub ReceivedText(ByVal [Text] As String)
        If Me.outputTextBox.InvokeRequired Then
          Dim x As New SetTextCallback(AddressOf ReceivedText)
          Me.Invoke(x, New Object() {(Text)})
        Else
          Me.outputTextBox.Text &= [Text]
        End If
    
      End Sub
    اگر یک توضیحی در مورد دستورای به کار رفته هم بدین ممنون میشم
    ممنون از دوستان
    آنان که خاک را به نـــــظر کیمیا کنند
    آیا بود که گوشه چشمی به ما کنند

    #2
    پاسخ : مشکلات در Visual Studio

    این دو تا لینک اطلاعات رو باینری میفرستن:
    http://stackoverflow.com/questions/25960993/how-to-send-8-bits-binary-data-to-serial-port
    http://stackoverflow.com/questions/22077910/sending-a-binary-byte-stream-over-serial-using-c-sharp-and-net-4-0

    دیدگاه


      #3
      پاسخ : مشکلات در Visual Studio

      ممنون از پاسخ شما
      من اون دوتا لینک رو بررسی کردن ولی نتونستم ارتباطی با این برنامه خودم برقرار کنم
      ولی اینجور که فهمیدم باید برای ارسال به پورت سریال اون متغیری که مقدار مدنظر داخلش ذخیره میشه از نوعی با شه که میخوایم ارسال بشه
      نمیدونم میتونید راهنمایی کامل تر کنید با همین کدی که دادم
      من فکر میکنم مشکلم از اینه که دارم از تو TexeBox میخونم :read:

      ممنون از پاسخ دوستان
      آنان که خاک را به نـــــظر کیمیا کنند
      آیا بود که گوشه چشمی به ما کنند

      دیدگاه


        #4
        پاسخ : مشکلات در Visual Studio

        خیلی وقت پیش منم میخواستم برنامه ارتباط سریال رو بنویسم اما ولش کردم. واسه همین یه چیزهایی از کار قبلی یادم مونده...
        شما دیتایی که از TextBox بخوای ارسال کنی ماهیت String داره، پس باید این رشته رو به باینری تبدیل کنید تا ارسال باینری داشته باشید.
        مثلاً اینجوری به باینری تبدیل کنید:
        [code=c]
        byte []arr = System.Text.Encoding.ASCII.GetBytes(str);
        [/code]

        البته این خروجی آرایه میده که جنسش Byte هست و ممکنه توی متد ارسالتون فقط String قبول کنه، پس تبدیل رو اینجوری هم میشه انجام داد:
        [code=c]

        string result = string.Empty;
        foreach(char ch in yourString)
        {
        result += Convert.ToString((int)ch,2);
        }
        [/code]

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

        دیدگاه


          #5
          پاسخ : مشکلات در Visual Studio

          با سلام خدمت همه دوستان
          مشکلم حل شد گفتم نتیجه رو بذارم بقیه هم استفاده کنن
          کد ارسال:
          کد:
          Dim buffer(2) As Byte
                Dim offset As Integer
                Dim count As Integer
          
                buffer(1) = 222
                buffer(2) = 2
                SerialPort1.Write(buffer, 1, 2)
          تو این کد buffer یک اری که به تعداد بایت های شمای مثلا من دو بایت رو میخوام پشت سر هم بفرستم
          مقدار اول 222 است و مقدار دوم 1 است خط سوم هم که ارسال میکنه اول buffer (1) و بعد buffer (2) رو ارسال میکنه
          اینجوری که من تست کردم بعد buffer عدد اری ارسالی هست که اینجا 1 و 2 است
          دریافت:
          کد:
          Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
              ReceivedText(SerialPort1.ReadByte)
            End Sub
          اینجاهم که کاملا مشخص از پرت سریال میگیره به صورت بایت میریزه تو متغییر ReceivedText
          منبع:
          http://www.me.umn.edu/courses/me2011...al-port-vb.pdf

          چنتا سوالم دداشتم از دوستان
          من میخوام یک کلید طراحی کنم که وقتی روش یکبار کلید میکنم نوشته کلید مثلا اگر ON هست بشه OFF بعد دوباره که رو ش کلید کردم بشه ON
          بعد یک کلید دیگه میخوام با هر بار کلید روش رنگ پس زمینه کلید تغییر کند

          یک سوال دیگه : من میخوام تو برنامه vb.net یک حلقه درست کنم که اولویت او از همه بشتر با و همیشه اجرا بشه
          یعنی این حلقه یکسره اجرا بشه اگر کلیدی خورد بره کاره او کلید رو انجام بده بعد برگرده تو همین حلقه
          چطور و کجا با ید این حلقه رو ایجاد کنم .

          ممنون از دوستان
          آنان که خاک را به نـــــظر کیمیا کنند
          آیا بود که گوشه چشمی به ما کنند

          دیدگاه


            #6
            پاسخ : مشکلات در Visual Studio

            اینجوری که من تست کردم بعد buffer عدد اری ارسالی هست که اینجا 1 و 2 است
            وقت بخیر

            کد:
            where buffer is the data array, offset is where the write should start (set to 0 to start at the
            beginning) and count is the number of bytes to write.
            طبق گفته اعداد بعد buffer محل شروع ارای و بعدیش تعداد هست !! همچنین گفته برای شروع از اولین مقدار ارای باید 0 قرار داد و برای ارسال 2 بایت باید 2 قرار داد .

            البته شما توی مقدار دهی کمی اشکال داری !!! buffer[2] یعنی ارای 2 عضوی و اعضای آن میشه buffer[0] و buffer[1] یعنی buffer[2] نداره !!! که شما مقدار دادی !!! نمیدونم چرا خطا نداده :rolleyes: :rolleyes:

            دیدگاه


              #7
              پاسخ : مشکلات در Visual Studio

              چنتا سوالم دداشتم از دوستان
              من میخوام یک کلید طراحی کنم که وقتی روش یکبار کلید میکنم نوشته کلید مثلا اگر ON هست بشه OFF بعد دوباره که رو ش کلید کردم بشه ON
              بعد یک کلید دیگه میخوام با هر بار کلید روش رنگ پس زمینه کلید تغییر کند
              راه حل که زیاد هست، مثلاً این یکیش:

              [code=cpp]
              if (button1.Text=="ON&quot
              {
              button1.Text = "OFF";
              }
              else
              {
              button1.Text = "ON";
              }

              [/code]

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


              توی برنامه های ویندوزی توصیه میکنم که از حلقه های بی نهایت استفاده نکنی (مثل میکرو نیست اینجا)، چون ممکنه نتونی مدیریتشون کنی و برنامه ات هنگ کرده به نظر بیاد یا منابع سیستم رو الکی هدر بده!
              تایمر ممکنه جوابگو کارت باشه اما اگر حلقه دیگه ایی داری که توی تایمر جاش نیست، بهتر هست دنبال روش های MultiThreading بگردی.

              دیدگاه


                #8
                پاسخ : مشکلات در Visual Studio

                تشکر مجدد از دوستان بابت راهنمایهاشون

                دوستان میدونید هر خط بر نامه چقدر طول میکشه؟ تو میکرو با کریستال 8 مگا هر خط حدودا 0.5 میکرو

                دستورات تو vb به صورت ترتیبی اجرا میشن یا به صورت موازی ؟
                مثلا وقتی تایمر اجرا میشه برنامه فقط تایمرو اجرا میکنه ؟؟

                ممنون
                آنان که خاک را به نـــــظر کیمیا کنند
                آیا بود که گوشه چشمی به ما کنند

                دیدگاه

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