PDA

View Full Version : سوال: چجوری میشه فهمید دیتای جدیدی روی پورت سریال اومده؟!!



AhmadAiden
دوشنبه 21 مهر 1393, 18:35 عصر
سلام به همه.
میخواستم در سی شارپ بدونم چجوری میشه فهمید دیتای جدیدی روی پورت سریالی که بازه اومده!
کسی هست کمک کنه؟

elec60
دوشنبه 21 مهر 1393, 23:15 عصر
با استفاده از ایونت: DataRecieved
اگه Windows Form کار میکنین یه کامپوننت SerialPort از ToolBox بکشین بندازین رو فرم و بعد کامپوننت رو انتخاب کنین و تو پنجره پراپرتیز تو قسمت Events برین روی ایونت DataRecieved دابل کلیک کنین تا متد به ایونت مزبور اتچ بشه. بعد هر داده ای که روی پورت سریال بیاد این متد اجرا میشه. باید دقت کنید که چون این متد داخل Thread جداگانه ای از Thread اصلی اجرا میشه نمیتونین از داخل این متد به کنترلهای داخل فورم دسترسی داشته باشین و برای دسترسی مثلا به لیبل روی فورم اصلی باید از PInvoke استفاده کنین.

AhmadAiden
سه شنبه 22 مهر 1393, 09:33 صبح
با استفاده از ایونت: DataRecieved
اگه Windows Form کار میکنین یه کامپوننت SerialPort از ToolBox بکشین بندازین رو فرم و بعد کامپوننت رو انتخاب کنین و تو پنجره پراپرتیز تو قسمت Events برین روی ایونت DataRecieved دابل کلیک کنین تا متد به ایونت مزبور اتچ بشه. بعد هر داده ای که روی پورت سریال بیاد این متد اجرا میشه. باید دقت کنید که چون این متد داخل Thread جداگانه ای از Thread اصلی اجرا میشه نمیتونین از داخل این متد به کنترلهای داخل فورم دسترسی داشته باشین و برای دسترسی مثلا به لیبل روی فورم اصلی باید از PInvoke استفاده کنین.

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

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

elec60
سه شنبه 22 مهر 1393, 10:55 صبح
بله همونجا بنويسين، البته تو پست قبلی هم گفتم که مستقيم نمیتونی به UI دسترسی داشته باشی.
فعلا نمايشت رو با MessageBox انجام بده و یا تو یه فرمی که تو همين متد نمونه سازی شده باشه...

AhmadAiden
سه شنبه 22 مهر 1393, 12:17 عصر
من یه پورت مجازی ساختم به صورت Bridge ولی با این برنامه کار نمیکنه. یعنی وقتی به اون یه پورت دیتا میفرستم کاری انجام نمیده... اینم کدم
private void process(object sender, EventArgs e)
{
if (rxtext.Length >= 4)
{
listBox1.Items.Add(rxtext);
textBox3.AppendText(rxtext);
MessageBox.Show(rxtext, "DR");
}
}

private void sp_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
rxtext = sp.ReadLine();
this.Invoke(new EventHandler(process));
}

elec60
سه شنبه 22 مهر 1393, 14:50 عصر
بايد رشته اي كه ارسال مي كنيد به n\ ختم بشه.
چك كنين بنينين ارسالتون به اين صورته.
متد ReadLine منتظر ميمونه تا n\ برسه

AhmadAiden
سه شنبه 22 مهر 1393, 18:13 عصر
متد ReadExisting چکار میکنه؟
بعد یه سوال دیگه البته فقط جهت اطمینان میپرسم.
با اینونت DataRecived مهم نیست در چه زمانی دیتا براش بیاد دیگه؟

لطف میکنین یه پروژه یا سورسی برام بذارین؟

AhmadAiden
سه شنبه 22 مهر 1393, 18:35 عصر
این موضوع یکم برام مهمه...
من نتونستم بازم دیتا بگیرم...
اگه کسی میدونه یه سورسی یا پروژه ای که ازش جواب گرفته بزاره. ممنون

MehdiElexal
سه شنبه 22 مهر 1393, 22:44 عصر
ReadExisting متدی هست که درصورتی که ذیتایی باشه خونده میشه و سریال قفل نمیشه
احتمالا با میکرو کار میکنید
بهترین روش این هست که بعد از گرفتن هر رشته سریال رو خالی کنید و آماده بارگیری مجدد باشید

AhmadAiden
سه شنبه 22 مهر 1393, 23:02 عصر
ReadExisting متدی هست که درصورتی که ذیتایی باشه خونده میشه و سریال قفل نمیشه
احتمالا با میکرو کار میکنید
بهترین روش این هست که بعد از گرفتن هر رشته سریال رو خالی کنید و آماده بارگیری مجدد باشید

بله ، در زمینه رباتیک میخوام استفاده کنم. شما سورسی چیزی دارین برام بذارین؟

AhmadAiden
چهارشنبه 23 مهر 1393, 19:56 عصر
کسی نظر دیگه ای نداره؟ من خیلی گیر کردم!

Helpco
شنبه 19 تیر 1395, 18:23 عصر
بايد رشته اي كه ارسال مي كنيد به n\ ختم بشه.
چك كنين بنينين ارسالتون به اين صورته.
متد ReadLine منتظر ميمونه تا n\ برسه
سلام
چطوری میشه در serialPort1_DataReceived فهمید که کارکتر مورد نظر هست یا نه
و اگر همزمان دو دستور پشت سر هم بیاد که این کارکتر داشت باشه چزور میشه تشخیص داد؟

mrprestige
شنبه 19 تیر 1395, 19:20 عصر
سلام به همه.
میخواستم در سی شارپ بدونم چجوری میشه فهمید دیتای جدیدی روی پورت سریالی که بازه اومده!
کسی هست کمک کنه؟
سلام دوست من وقتت بخیر ، برات این مثال ها رو پیدا کردم امیدوارم کمکت منه

MSDN (https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v=vs.110). aspx)

MSDN (https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.readline(v=vs.110).aspx )

StackOverflow (http://stackoverflow.com/questions/13754694/what-is-the-correct-way-to-read-a-serial-port-using-net-framework)

dreamincode (http://www.dreamincode.net/forums/topic/98376-how-to-read-data-from-serial-port/)

موفق باشی