PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : بررسی پورت سریال در سی شارپ#c



mzarkoob
01-12-2011, 18:08
با سلام

گفتم این تایپیک را جداگانه بزنم که یه شروعی باشه در اون پورت سریال را در c# کامل با مثال بررسی کنه(شاید هم بشه یه مرجع!) خوب من خودم قبلا که یه سرچی کردم کم مطلب پیدا کردم که عمدتا پراکنده بود. با یک کم بررسی دیدم که موضوع سختی هم نیست ولی کاربردیه و جای سوال هم زیاد داره. جای اون را در این قسمت خالی دیدم. امیدوارم دوستان هم همکاری کنند تا به هدف گفته شده برسیم.:gop:

mzarkoob
01-12-2011, 20:23
خوب این قسمت اول که یه توضیح کلی به همراه شرح چند دستور می باشد. البته دیگه از ابتدا که ایجاد یک پروژه و .. هست شروع نکردم چون فکر می کنم در اینجا (You can see links before reply) و ... (You can see links before reply) صحبت شده.
می بینید که استفاده از اونها هم بسیار ساده هست. در قسمت بعدی با همینها چند تا مثال می گذارم. و بعد می رم سر چیزهایی که خودم توش سوال دارم!
امیدوارم مفید باشه.:hi:

mzarkoob
01-12-2011, 23:31
خوب این دو مثال ساده هست برای کار با این پورت. امیدوارم زیادی ساده نباشه!

morteza_rk
02-12-2011, 14:24
سلام

من با پورت سریال در vb.net کار کردم و تقریبا هم کامل می دونم چی به چیه! انشالله در یه فرصت مناسب یه آموزش جامع در مورد ارتباط میکروکنترلرها و پورت سریال کامپیوتر قرار میدم. اما زمانش به هیچ وجه معلوم نیست.

از طرفی با ++c یا #c کار نکردم. اما معلومه که سادست ، کلا زبان های سطح بالا ، مخصوصا ویژوال یادگیریشون آسونه ، اما تا دلت بخواد گسترده هستن و این چیزیه که آدمو می ترسونه!؟

sadmonew
02-12-2011, 15:00
با سلام
بله با VB.net ‍ و #C راحته اما با ++C يه مقدار مشكله. اونم به خاطر كار با توابع API هستش كه تو سطح پايين سخت افزار رو كنترل و پيكربندي ميكنه.
اگه وقت كرديد قرار بديد :o

mzarkoob
02-12-2011, 21:54
در این قسمت دو سه تا مثال دیگه زده شده . نکته ای که هست سه تا سوال مطرح کردم که در اجرای برنامه دچار مشکل ایجاد کرده است. اساتید اگر کسی می تواند آنها را حل کند که ممنون می شوم. سوال سوم را قبلا در یک انجمن دیگه جواب گرفتم ولی واقعیتش نفهمیدم در برنامه اصلاحی چه کرده!!
خوب فایل مثال انجام شده را هم ضمیمه می کنم تا راحت بتونید اجرا کنید.:wink:

mzarkoob
04-12-2011, 10:38
با یک مقاله در مورد پورت سریال برخوردم که جالب و خوب بود. ضمیمه می کنم تا دوستان هم استفاده کنند.
یه مقدار سوالاتی را که مطرح کردم را جواب میده
منبع (You can see links before reply)

sadmonew
04-12-2011, 11:34
در این قسمت دو سه تا مثال دیگه زده شده . نکته ای که هست سه تا سوال مطرح کردم که در اجرای برنامه دچار مشکل ایجاد کرده است. اساتید اگر کسی می تواند آنها را حل کند که ممنون می شوم. سوال سوم را قبلا در یک انجمن دیگه جواب گرفتم ولی واقعیتش نفهمیدم در برنامه اصلاحی چه کرده!!
خوب فایل مثال انجام شده را هم ضمیمه می کنم تا راحت بتونید اجرا کنید.:wink:
با سلام به دوست عزیزم جناب mzarkoob.
فایلایی رو که گذاشتید رو دانلود کردم اما هنوز وقت نکردم کامل بخونمش و اون سه تا سوالی که عنوان کردید رو هم دیدم، اما هنوز تو جزئیاتش نرفتم که ببینم دلیلش چی میتونه باشه.
خواستم بگم یه موقع فکر نکنید فقط میخوایم دانلود کنیمو از منابع آماده استفاده کنیم و به قولی لقمه آماده!!:wink::hi::0013:
بازم ممنون

mzarkoob
05-12-2011, 05:01
سلام
شما لطف دارین... فکر کنم تا حدودی جواب سوال سوم را گرفتم. جمع بندی که کردم میذارم. اینم میذارم فعلا برای اجرا . سیم 2 پورت سریال را به سه وصل کنید و بعد تایپ چیزی در تکس باکس ارسال کنید نتیجه را ببینید!

behnam6500
05-12-2011, 13:29
کو 3 سوال؟

mzarkoob
05-12-2011, 17:20
کو 3 سوال؟
خوب در همان فایل اول دانلود در قسمت سوم(پست 6) هست دیگه!
البته بگم تا حدود زیادی مسئله خطا دادن هنگام استفاده از تکس باکس در DataReceived حل شده. دو راه حل داره. 1- استفاده از یک تایمر که داده را در رویداد DataReceivedبگیریم و هر یه زمان مشخص در تکس باکس نشون بدیم. 2- استفاده از invoke است. برنامه ای هم که در پست 9 گذاشتم از روش دوم استفاده کرده.
فعلا یه کم روی تفاوت انواع write و read مورد دارم. کلیتش را میدونم ولی در اجرا خیلی گیر داره.
دستور serialPort1.Read(buffer, 0, bytes); برامون به صورت کد دسیمال میگیره برای اصلاح در گرفتنن و تبدیل به کاراکتر باید برای ارسال انگار اسکی بشه:

byte[] buffer = Encoding.ASCII.GetBytes(s);
serialPort1.Write(buffer, 0, buffer.Length);
و در گرفتن هم همین طور:

if (buffer[t] < 32)
{
s.Append(buffer[t].ToString());
}
else
{
s.Append(Encoding.ASCII.GetString(buffer, t, 1));
}
}
s.AppendLine();
lock (inputData)
{
inputData += s.ToString();
}حالا من از این دستورات زیاد سر در نمی یارم ! مثلا Append کارش چیه؟ ....

behnam6500
05-12-2011, 18:40
در رابطه با خوندن از پورت بهترین گزینه، استفاده از delegate ها هستند (یا همون invoke) که گفتین!

در رابطه با متد append،

s از نوع stringbuilder تعریف شده و متد append برای ایجاد رشته در آن کاربرد داره.

s.AppendLine(); حکم همان \n رو داره و در نهایت inputData += s.ToString();
s را تبدیل به رشته میکنه و. در inputdata میریزه

sadmonew
06-12-2011, 18:05
با سلام. عزادارياتون قبول. انشاءالله
ميدونم داريم در مورد #C صحبت ميكنيم اما يه سايت پيدا كردم كه در مورد راه اندازي و استفاده از پورت سريال تو زبان برنامه نويسي VB.NET بحث كرده به همراه يه مثال خوب.
اين لينك سايت:
Serial Communication with Visual Basic .NET (You can see links before reply)
اينم لينك دانلود سورس برنامه:
You can see links before reply

behnam6500
06-12-2011, 18:23
بین سی شارپ و vb.net هـــــیچ فرقی وجود نداره!

پس هر کدوم رو که دوست داشتید یاد بگیرید!

mzarkoob
06-12-2011, 23:21
می خواهیم برنامه ای بنویسیم که تفاوت های بین انواع write و انواع read را برایمان مشخص کند. بدین صورت متنی را ارسال کرده و دریافت کرده با دیدن تفاوت ها در عمل، نکات ریزی که در این باره وجود دارد را مشاهده می کنیم. بدین صورت عمل می کنیم:
در یک طرف سه تکس باکس در فرم قرار می دهیم و برای هر کدام یک باتون. می خواهیم متنی را با write به سه طریق با کلیک روی باتون مربوطه ارسال کنیم:

serialPort1.WriteLine(textBox1.Text);
-----------------------------
serialPort1.Write(textBox2.Text);
-----------------------------
string s = textBox3.Text;
byte[] buffer = Encoding.ASCII.GetBytes(s);
serialPort1.Write(buffer, 0, buffer.Length);

خوب یک مورد دیگه هم می خواهیم اضافه کنیم و آن اینکه متنی را که در بافر(buffer)برای ارسال قرار می گیرد کد شده به صورت اسکی نباشد تا تفاوت را متوجه شویم. با چه دستوری رشته s را داخل بافر بریزیم؟ من اینجا چند تا دستور تست کردم، نمی دونم چرا خطا می داد!

در مقابل چند تکس باکس قرار می دهیم که چیزی که در پورت سریال قرار میگیرد را با انواع دستور read بخواند. به دو طریق این کار را انجام می دهیم ببینیم در عمل چه جوابی می گیریم و موارد ایراد کجاست.

اول: در کنار هر تکس باکس یک باتون قرار می دهیم که با کلیک روی آن چیزی که در بافر پورت سریال قرار دارد را بخواند و در تکس باکس قرار دهد:


textBox5.Text = serialPort1.ReadLine();
--------------------------------------
int bytes = serialPort1.BytesToRead;
byte[] byte_buffer = new byte;
serialPort1.Read(byte_buffer, 0, bytes);
for (int t = 0; t < bytes; t++)
{
textBox6.Text += byte_buffer[t].ToString();
}
--------------------------------------
int received_byte;
received_byte = serialPort1.ReadByte();
textBox7.Text = received_byte.ToString();
--------------------------------------
int received_char;
received_char = serialPort1.ReadChar();
textBox9.Text = received_char.ToString();


(در اینجا یادمان نرود پایه شماره 2 پورت سریال به پایه 3 صل وشود.)

خوب یه متنی را درtextBox1 تایپ و ارسال(WriteLine) می کنیم. با کلیک باتون5 (ReadLine) می بینیم که همان متن به نمایش در می آید. اگرهمان موقع روی باتون6(Read)کلیک کنیم چیزی نمی توانیم مشاهده کنیم! و باید از برنامه خارج شویم. دلیل این است که ReadLine دیتای رسیده تا ابتدای خط بعدی می خواند و تا مجدد Read کنیم در خط بعدی بافر چیزی وجود ندارد که بخواند.

مجددا متنی را درtextBox1 تایپ و ارسال (WriteLine)می کنیم.این بار روی باتون6(Read)کلیک کنیم. مشاهده می کنیم که معادل [B]دسیمال کاراکتر های ارسالی را برایمان نمایش می دهد. اگر مجددا برنامه را اجرا کنیم و متنی را درtextBox2 تایپ و ارسال(Write) می کنیم و روی باتون6(Read)کلیک کنیم مشاهده می کنیم که دیگر در انتهای اعداد دسیمال به نمایش در آمده، عدد 10 نیست. زیرا دستور Write دیگر مثل WriteLine در انتها تب enter را نمی فرستد. اگر همین یا موقعی که از موقع Write برای ارسال استفاده کرده باشیم، باتون5(ReadLine) را کلیک کنیم برنامه هنگ می کند و با close کردن هم بسته نمی شود! پس در عمل ملاحظه می شود وقتی برای خواندن از دستور ReadLine استفاده می شود منتظر ارسال کاراکتر enter می ماند. یعنی اگر از Write برای ارسال استفاده کرده باشیم در انتهای متن یک اینتر بزنیم و ارسال کنیم، ملاحظه می شود که دیگر با استفاده از دستور ReadLine برای خواندن، برنامه هنگ نمی کند. کاری که در اینجا می خواهیم انجام دهیم این است که وقتی از Read برای خواندن استفاده می کنیم معادل دسمال برنگرداند. راه حل چیست؟

اگر متنی را درtextBox1 یا textBox2 تایپ و ارسال می کنیم و روی باتون7(Readbyte) کلیک کنیم مشاهده می کنیم که فقط یک کاراکتر را به معادل دسیمال برمی گرداند(با هر بار کلیک). اگر برنامه را بسته و مجددا برنامه اجرا کنیم و روی باتون9(Readchar) کلیک کنیم می بینیم که این هم معادل دسیمال کاراکتر ارسالی را برگردانده است. خوب پس تفاوت این دو در چیست!؟ تصور من این بود که این دستور مثل ReadLine کارکتر برمی کرداند منتها یک کاراکتر، نه همه یک خط.

در صورتی که متنی را با textBox3 (Write ASCII) ارسال کنیم تفاوتی در دریافت مشاهده نشد! پس این دستور : Encoding.ASCII.GetBytesکارش چیه!؟

--------------------------------------------------------------------------

همان طور که ملاحظه فرمودید به غیر از چند ایراد که ذکر شد، ایراد کلی این کار این است که مرتب برای یک تست باید برنامه را اجرا و بسته و برای بعدی مجددا این کار را انجام دهیم. می خواهیم متنی را ارسال با یک کلیک روی باتون ارسال یا کلیک روی باتون های دریافت ، متن دریافتی را ملاحظه کرده و تفاوت ها را ببینیم. راه حل چیست؟

دوم؟؟!

فایل اجرایی را برای راحتی تست ضمیمه کردم.

اما يه سايت پيدا كردم
اين لينك سايت:
Serial Communication with Visual Basic .NET (You can see links before reply)

نمی دونم چرا باز نمی کنه سایتا!

sadmonew
06-12-2011, 23:30
با سلام
باز ميشه. مشكلي نداره!!

mzarkoob
07-12-2011, 00:30
با سلام
باز ميشه. مشكلي نداره!!
بّله. الان باز شد! خیلی عجیبه!
خوب من قبلا از سایت You can see links before reply یه تعداد پروژه گرفته بودم .چیزای خوبی بود. ولی بعضا سخت بود بفهمی چجوری این برنامه را با پورت سریال نوشته. در ادامه چند تاش را میارم

sadmonew
07-12-2011, 00:34
بله سايت You can see links before reply سايت خيلي عالي هستش. چند سالي ميشه خودم اونجا عضو هستم. دستت درد نكنه حتما بذار.
البته خودم يه برنامه اونجا قرار دادم.

alamdar
13-12-2011, 18:21
سلام به دانشمندان جوان عزیز

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

من یه سوال دارم نمیدونم کجا باید بپرسم؟

من اگر بخوام از یک مادربرد کامپیوتر به جای میکرو توی یک ربات پیشرفته استفاده کنم چطور باید سنسور هارو بهش متصل و چطور باید برنامه نویسیسشون کنم؟ مخصوصا با سی شارپ دوست دارم این کارو انجام بدم

میشه یکم راهنمایی کنید و منبع آموزشی فارسی هم در این مورد میشناسید اگر معرفی کنید؟

با سپاس فراوان و آرزوی موفقیت

mzarkoob
13-12-2011, 19:25
نحوه پروگرام کردن میکرو با سی شارپ به وسیله پورت سریال؟

ii998)ii998) ای بابا!! ... به قول آقایagape نه دایی جان!! ارسال و دریافت دیتا در سی شارپ پورت سریال . حالا شما این پورت سریالی که از کامپیوتر میاد بیرون را می تونی به هر چیزی که پورت سریال داره وصل کنی تا اون چیزی که فرستادی را دریافت کنه یا ...


من یه سوال دارم نمیدونم کجا باید بپرسم؟
من اگر بخوام از یک مادربرد کامپیوتر به جای میکرو توی یک ربات پیشرفته استفاده کنم
سوال سی شارپی را در قسمت برنامه نویسی (You can see links before reply) دیگه باید مطرح کرد دیگه! در مورد pc104 هم یه سرچی بکنید بد نیست.

alamdar
13-12-2011, 21:30
خب این همون چیزی میشه که من میخوام؟

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

البته این کار رو از روی حافظه باید انجام بده خودش و نه به صورت دستی

shshsh
09-07-2012, 14:05
salam
khaste nabashid
bekahshid dar hamon mesale avaleton
baraye ersal va daryaft az port serial
1)serialPort1.WriteLine(textBox1.Text); che kari anjam midahad?
2)label1.Text = serialPort1.ReadLine(); ERROR midahad:the port is closed
che kar baiad kard??????????
mamnon misham rahnamaee befarmaeed
mamnon

behnam6500
09-07-2012, 23:04
خب این همون چیزی میشه که من میخوام؟

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

البته این کار رو از روی حافظه باید انجام بده خودش و نه به صورت دستی

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

پورت USB هم باید میکرو داشته باشی...

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

اسلات ISA اگر کار کنی هم یه جورایی مثل پارالل هست...




salam
khaste nabashid
bekahshid dar hamon mesale avaleton
baraye ersal va daryaft az port serial
1)serialPort1.WriteLine(textBox1.Text); che kari anjam midahad?
2)label1.Text = serialPort1.ReadLine(); ERROR midahad:the port is closed
che kar baiad kard??????????
mamnon misham rahnamaee befarmaeed
mamnon


برادر راجع به سریال زیاد بحث شده... سرچ میکردی زودتر به جواب میرسیدی...
سوال اول، مقدار textbox رو میفرسته به سریال.
دومی هم داره میگه که پورت باز نیست! با متد open بازش کن...

aliamarlo
21-08-2012, 20:31
با سلام ،عضو تازه وارد هستم .
داشتم دنبال یک تحقیق در مورد یک زبان برنامه نویسی که بتوان با آن از پورتهای کامپیوتر برای ورود خروج اطلاعات استفاده کرد، میگشتم و با این سایت آشنا شدم و یکی دو مورد نظرم را جلب کرد از دوستان به خاطر درج مطالب تشکر می کنم.

morteza_rk
20-09-2012, 16:45
سلام توی تاپیک زیر یه نمونه برنامه برای ارتباط با پورت سریال در C# گذاشتم.

چگونگی شناسائی اتوماتیک پورت comو خواص آن در vb.net - صفحه 2 - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

eng
16-06-2013, 18:13
سلام.چرا این بحث نصفه رها شده؟؟
mzarkoob:
من برنامه هاتون را با میکرو تست کردم مشکلاتی که گفتید وجود داره.جواب سوالاتونو پیدا کردید؟میشه برنامه ی نهایی تون را بذارید

mzarkoob
16-06-2013, 22:24
سلام.چرا این بحث نصفه رها شده؟؟
mzarkoob:
من برنامه هاتون را با میکرو تست کردم مشکلاتی که گفتید وجود داره.
سلام
شما کجا مشکل دارید؟

morteza_rk
16-06-2013, 23:09
سلام توی تاپیک زیر یه نمونه برنامه برای ارتباط با پورت سریال در c# گذاشتم.

مهندس به تاپیکی که اشاره کردم مراجعه کنید لطفا.

virtex6
23-08-2013, 08:02
سلام.من متوجه نشدم دلیل اون اروری که تو سوال 3 گفتی چی بود.میشه کمی توضیح بدید؟
ممنون

mzarkoob
05-10-2013, 14:24
سلام.چرا این بحث نصفه رها شده؟؟
mzarkoob:
من برنامه هاتون را با میکرو تست کردم مشکلاتی که گفتید وجود داره.جواب سوالاتونو پیدا کردید؟میشه برنامه ی نهایی تون را بذارید
سلام
فکر کنم ادامه این بحث رفته اینجا! :
آموزش پورت سریال در c# - ایـــــــــران میـــــــکرو ™ (You can see links before reply)
:wink:

omidan321
19-10-2013, 21:38
گه بخواهیم عبارات hex را ارسال و دریافت کنیم ، چه کار باید بنکنیم و چه دستوراتی رو چطور باید استفاده کنیم ؟؟؟؟؟؟؟؟؟؟؟

shahrivar88
20-10-2013, 21:20
دوست گرامی سوال شما یک مقدار ایراد داره. هر ارسالی به صورت یک عدده که معمولا کد اسکی هست.
برای نمایش اون عدد ما به فرم هگزا دسیمال یا ده دهی بکار میبریم.
در مورد ارسال ها در سی شارپ به بخش 4 و صفحه 107 از کتاب زیر مراجعه کنید.

دانلود کتاب آموزش ارتباط با پورت سریال در C# تکنو الکترو - سایت تخصصی برق و الکترونیک (You can see links before reply)

toranj.b
07-07-2014, 18:47
خوب این دو مثال ساده هست برای کار با این پورت. امیدوارم زیادی ساده نباشه!

منظور ازینکه پین دو و یه را به هم متصل کنیم چیه؟
سخت افزاری است یا نرم افزاری؟

mzarkoob
07-07-2014, 19:06
مشخصه دیگه سخت افزاره پین دو پورت سریال کامپیوترتان را به پورت شما سه آن وصل نمایید

toranj.b
07-07-2014, 23:26
مشخصه دیگه سخت افزاره پین دو پورت سریال کامپیوترتان را به پورت شما سه آن وصل نمایید
ببخشید واسه سوال های ابتدایی اما توی لپتاپ که انگار پورت سریال نداریم (سخت افزاری) چکار باید بکنیم؟

mzarkoob
08-07-2014, 00:01
از یک سخت افزار مبدل مثل usb2com استفاده کنید. مثل mini lpc programer یا ...