اطلاعیه

Collapse
No announcement yet.

serial portدرvisual c#

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

    serial portدرvisual c#

    سلام به همگی
    من میخوام یک آرایه 128تایی از اعداد از نوع charاز طریق serial portبفرستم.این برنامه تو محیط visual c#.کسی برنامشو داره؟parityوstop bitونرخ باود کجاتنظیم میشه؟ممنون میشم کمک کنید.

    #2
    پاسخ : serial portدرvisual c#

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

    دیدگاه


      #3
      پاسخ : serial portدرvisual c#

      سلام به همگی
      من کد زیرو نوشتم.اما وقتی برنامه را اجرا می کنم کلا سیستم قل می کنه.کسی می دونه چرا؟
      اصلا این برنامه میتونه یک آرایه از اعداد از نوع
      Int یاchar
      بفرسته؟ private void btncod_Click(object sender, EventArgs e)
      {
      byte[] str = new byte[5];
      str[0] = 12;
      str[1] = 24;
      str[2] = 102;
      str[3] = 215;
      str[4] = 2;
      string portName = "COM3";
      int buadRate = 9600;
      SerialPort serialPort = new SerialPort(portName, buadRate);
      serialPort.DtrEnable = true;
      serialPort.RtsEnable = true;
      serialPort.Handshake = Handshake.None;
      serialPort.Parity = Parity.None;
      serialPort.StopBits = StopBits.One;
      serialPort.Open();
      serialPort.Write(str, 0, str.Length);
      serialPort.Close();


      }

      دیدگاه


        #4
        پاسخ : serial portدرvisual c#

        با سلام. من برای اولین بار سعی دارم با پورتهای سری کار کنم و تجربه ای در این زمینه ندارم. اطلاعاتی بدست آوردم اما منسجم نیستند. میخوام توسط RS-232 با یک دستگاه ارتباط برقرار کنم. با یک پرینتر شروع کردم. میخوام متنی از کاربر گرفته و به پرینتر برای چاپ بفرسته. برنامه هیچ errorی نمیده اما هیچ عکس العملی هم از پرینتر دریافت نمیکنم. اصلا نمیدونم ارتباط برقرار میشه یا خیر. چطور میتونم این ارتباط رو چک کنم؟ میتونید کمکم کنید و توضیح بدید روند کارم به چه صورت خواهد بود؟

        پیشاپیش از لطف بی کرانتان سپاس

        دیدگاه


          #5
          پاسخ : serial portدرvisual c#

          سلام
          من قبلا بسیار زیاد بین دو میکرو کنترلر با ارتباط سریال کار کرده ام و می دونم که شاید در خیلی مواقع بهترین روش برای دریافت داده ها از طریق پورت سریال استفاده از وقفه دریافت است که البته هنگامی که دیتایی به پورت سریال می آید تابعی خاص بصورت خود بخود اجرا می شود و برنامه بصورت خودکار به آنجا می رود و در این تابع ما می توانیم کد نویسی کنیم و بسته به کارکردو کارایی برنامه آن بایت دریافت شده را در جایی ذخیره کنیم و در حالت نرمال برنامه کار خود را می کند مگر آنکه دیتایی از طریق سریال دریافت کند
          البته من زیاد vc# بلد نیستم ولی هرکاری کردم نتونستم این تابع وقفه را برای آن هم پیدا کنم و تنها بایستی برنامه را بصورت به اصلاح پولین اجرا کنم که اصلا کارآمد نیست ( برای کار من )
          دوستان گر کمکم کنند ممنون می شوم
          من کد برنامه ای را که برای این منظور تا کننون نوشته ام در زیر قرار می دهم من تابع وقفه را می خواهم







          SerialPort Sp = new SerialPort();
          try
          {
          if (!Sp.IsOpen)
          {
          Sp.BaudRate = 9600;
          Sp.PortName = port.Text;
          Sp.Open();
          }
          byte[] byteq = new byte[6];
          byte rx_state = 0;
          int[] data_recive = new int[100];
          ; while (Sp.BytesToRead == 0)
          {
          // {
          // MessageBox.Show(" خطا در برقراری ارتباط "

          // }
          }

          // while(!Sp.DataReceived)
          while (Sp.BytesToRead > 0)
          {



          این دستور while (Sp.BytesToRead == 0) خیلی اذیتم می کنه
          واقعا به کمکتون نیاز دارم
          بسیار بسیار ممنون میشم اگر کسی به من کمک کنه

          دیدگاه


            #6
            پاسخ : serial portدرvisual c#

            تو سی شارپ به جای اینتراپت، ایونت داریم
            پورت سریال هم سه تا ایونت داره که یکیش دیتاریسیود هست
            بوسیله این کد میشه دیتای دریافتی رو تو یه باککس نشون داد:

            کد:
            this.Sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.SerialPort1DataReceived);
            
            
            		void SerialPort1DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) {
            			MessageBox.Show(Sp.ReadChar().ToString());
            		}
            {خلاف قوانین - امضا ویرایش شد}

            دیدگاه


              #7
              پاسخ : serial portدرvisual c#

              سلام
              انجا رو ببین
              http://ehsanavr.com

              دیدگاه


                #8
                پاسخ : serial portدرvisual c#

                با تشکر از زحمت شما
                ولی کد شما کار نمی کنه و همش error می زنه ، البته خیلی از این قبیل مسایل رو به حساب ناشی بودن من بذارید ولیکن میشه یک کم بیشتر توضیح بدین که مثلا ایونت رو کجای برنامه باید بنویسم و اون تابع ایونت رو باید در کدوم فرم و کجا بنویسم
                من دقیقا اجزا این ایونت رو نمی شناسم
                ممنون میشم

                دیدگاه


                  #9
                  پاسخ : serial portدرvisual c#

                  ایونت پورت هم عین ایونت بقیه آبجکتها میمونه
                  مثلا همونجایی که ایونت مربوط به فشرده شدن باتن نوشته شده، دقیقا بعدش باید کد مربوط به ایونت پورت سریال نوشته بشه
                  این کد بهتر میتونه کمک کنه:
                  کد:
                  using System;
                  using System.Windows.Forms;
                  
                  namespace _tst {
                  	public partial class MainForm : Form {
                  		System.IO.Ports.SerialPort Sp = new System.IO.Ports.SerialPort();
                  		public MainForm() {
                  			InitializeComponent();
                  			this.Sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.SerialPort1DataReceived);
                  		}
                  		
                  		void Button1Click(object sender, EventArgs e) {
                  			MessageBox.Show("BtnClicked");
                  		}
                  		
                  		void SerialPort1DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) {
                  			MessageBox.Show(Sp.ReadChar().ToString());
                  		}
                  	}
                  }
                  {خلاف قوانین - امضا ویرایش شد}

                  دیدگاه


                    #10
                    پاسخ : serial portدرvisual c#

                    سیار ممنونم از شما کدی که شما گفته بودید کار کرد و البته همون اولش هم اشکال از من بود .
                    حالا توی اون تابع دیتاها رو میگیرم و در هر مرحله یک ایندکس به متغییر اضافه کرده و از تابع خارج می شوم ولی مشکل اینجاست که در هر بار که تقاضای دریافت میدهم فقط سه بایت می اید و در مرحله بعدی جالب اینکه 3 بایت بعدی در واقع همان بایتهای مورد نتظار برای دریافت پشت سر همان 3 بایت اول هستند با این تفاوت که بلافاصله بعد از اون دریافت نمی شوند و بایستی یکبار دیگر تقاظای دریافت بفرستم تا ارسال شود .
                    من این مسله رو با کدویژا¾ن تست کردم و د ترمینال سریال اون همان دستور را ارسال کردم و تمام بایتها به ترتیب و با یکبار تقاضا دریافت می شود ولی اینجا مرحله مرحله است .
                    بافر دریافت و ارسال ایونت رو هم زیاد کردم ولی فرقی نکرد .
                    نمی دونم اشکال کار کجاست ممنون می شم بهم کمک کنید .


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

                    public byte[] byteq = new byte[20];

                    byteq[0] = 0xEB;
                    byteq[1] = 0xA1;
                    byteq[2] = 0x3A;
                    Sp.Write(byteq, 0, 3);
                    و آنگاه در تابع ایونت من هرگاه پاسخی بیاید ئر یک متغییر آرایه ای ذخیره کی کنم و می دانم که در پاسخ این 32 بایت ، 9 بایت می آید و بلافاصله و پشت سرهم ولی هر بار که من ارسال می کنم تنها 3 بایت می گیرم و ادامه را در 3 بایت بعدی ( خیلی به نظر من عجیب است )
                    در تابع ایونت هم دارم :
                    rx_state++;

                    data_recive[rx_state] = Sp.ReadByte();


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

                    دیدگاه


                      #11
                      پاسخ : serial portدرvisual c#

                      واقعا کارم گیر این قضیه است اگر کسی بتونه به من کمک کنه ممنون می شم

                      دیدگاه


                        #12
                        پاسخ : serial portدرvisual c#

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

                        /

                        بافر ورودی چقدر تعریف شده؟
                        {خلاف قوانین - امضا ویرایش شد}

                        دیدگاه


                          #13
                          پاسخ : serial portدرvisual c#

                          سلام و با تشکر فراوان بابت وقتی که به من می دهید.
                          برنامه میکرو یقینا درست کار می کنه این برنامه قبلا با یک کیبرد صنعتی کنترل می شده و من سعی دارم جای اون از یک برنامه کامپیوتری استفاده کنم و کیبرد صنعتی رو حذف کنم برنامه میکرو رو هم قبلا خودم نوشتم و خیلی خوب کار می کنه و وقتی یک دستوری بهش می دیم جواب می ده بعضی وقتها که کیبرد در دسترس نبود من با ترمینال نرم افزار کدوژن که چیزی شبیه به هایپر ترمینال است با تفاوت اینکه کد هگز رو می توان روی اون دید نه اسکی ؛ این کدها رو به دستگاه ارسال می کردم و جواب اون روهم روی همون ترمینال می دیدیم وهمین الان هم که این موضوع رو دارم این بدرستی کار می کنه
                          با برنامه ای که شما راهنمایی کردین هم کار می کنه و بایتها درست میاد اونها رو می تونم ببینم ولی هر بار درخواست می کنم فقط 3 بایت میاد نه بیشتر و در درخواست بعدی هم 3 بایت دیگر میاد که در واقع بایت 4 و 5و 6و ما هستند و در واقع من بایستی چند بار درخواست ارسال بکنم تا دیتاها کامل بیاد در صورتی که با اون کیبرد سابق و همچنین با ترمینال کدویژن با یکبار درخواست تمام بایتها با هم میان .
                          البته تخصصمن در میکرو است ومن زیاد با برنامه c# آشنایی ندارم و تصمیم گرفتم که یک pc بتونه در برخی مواقع جایگزین این کیبرد صنعتی بشه که نمی دونم ارسالم مشکل داره یا دریافتم
                          بافر اون ایونت رو هم تا 8 کیلو زیاد کردم ولی تفاوتی نکرد نمی دونم مشکل کجاست .

                          دیدگاه


                            #14
                            پاسخ : serial portدرvisual c#

                            واقعا به کمک نیاز دارم کاملا گیج شدم شاید هم توی ارسالم مشکل دارم یعنی هر بار ارسال رو می زنم تنها یک بایت ارسال میشه تابع دیگری برای ارسال بایت به پورت سریال وجود ندارد ؟

                            دیدگاه


                              #15
                              پاسخ : serial portدرvisual c#

                              الان کاملا مطمئن شدم که مشکلم در نوشتن در پورت نیست و فقط در خواندنمشکل دارم و البته بسیار نیازمند کمک هستم حتما یکی پیدا میشه که با پورت سریال با ایونتش کار کرده باشه . لطفا کمکم کنید که مشکل را پیدا کنم

                              دیدگاه

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