View Full Version : ارتباط با پورت سریال
sadeghjun
شنبه 12 اسفند 1391, 02:00 صبح
سلام
من یه برنامه برای کار با پورت سریال نوشتم ولی دو تا مشکل دارم
1 - در این برنامه هر بار که کلید send زده می شه پورت سریال خونده میشه و روی یک RichTextBox نمایش داده میشه ولی هربار پاک میشه. من میخوام به خط بعدی بره و اطلاعات قبلی پاک نشه همچنین اگه خطوط زیاد شد Scroll کنه
2- کدی که من به کامپیوتر ارسال میکنم s هستش ولی این برنامه 115 نمایش میده. باید چیکار کنم؟
من سورس برنامه رو میذارم
ممنون میشم کمکم کنید
با تشکر
فایل های کامل پروژه:
http://s2.picofile.com/file/76744166...ghAPP.rar.html
sadeghjun
شنبه 12 اسفند 1391, 02:04 صبح
من اول متن رو توسط کاربر میگیرم سپس اونو روی RichTextBox نمایش میدم
از آقا محسن هم ممنون بخاطر پاسخش. مشکل دوم من حل شد ولی مشکل اول هنوز حل نشد
اول این جوری نوشته بودم:
RichTextBox1.Text = DataTextBox.Text
بعد به پیشنهاد دوستان این جوری:
RichTextBox1.Text = DataTextBox.Text & vbCrLf
البته این جوری هم نوشتم:
RichTextBox1.Text = DataTextBox.Text
RichTextBox1.Text = RichTextBox1.Text & vbCrLf
ولی هیچ کدوم مشکل رو حل نکرد!
دوستان اگه اشتباه کردم بهم بگید
ممنون
فرید نجفلو
شنبه 12 اسفند 1391, 03:50 صبح
سلام
مشکل شما از نحوه خوندن از پورته
شما تو هر بار از این دستور استفاده می کنید:
RichTextBox2.Text = SerialPort1.ReadChar
که فقط یک کاراتر از پورت می خونه و مقدار اسکی اون رو بر می گردونه
شما بهتر با کد زیر کل مقادیر موجئد پورت رو یک جا بخونید:
RichTextBox1.Text &= SerialPort1.ReadExisting()
و البته اگه اطلاعات پورت شامل حروف فارسی هم باشه ممکنه به این کد هم نیاز داشته باشید (تو لود فرم):
SerialPort1.Encoding = System.Text.Encoding.UTF8
sadeghjun
شنبه 12 اسفند 1391, 21:40 عصر
سلام
با تشکر فراوان از فرید عزیز
با کمک شما دوستان مشکلات قبلی حل شد که تصویر برنامه به صورت زیر است:
http://s3.picofile.com/file/7676854515/03_02_2013_08_52_40_%D8%A8_%D8%B8.jpg
حالا 2 تا مشکل دیگه دارم!
من تو برنامه گفتم هر وقت کلید send زده شد اطلاعات رو ارسال و بعد بخوان به صورت زیر:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendButton.Click
If Not SerialPort1.IsOpen Then
SerialPort1.Open()
End If
DataTextBox.Select()
If SerialPort1.IsOpen = True Then
Message.ForeColor = Color.Green 'set message text color
Message.Image = ok 'set message image
Message.Text = " Device Is Connected !"
RichTextBox1.Text &= DataTextBox.Text & " " & CStr(Now) & vbCrLf 'set RichTextBox1 text = DataTextBox text
SerialPort1.Write(DataTextBox.Text) 'send DataTextBox Text to device
associatedChar = ChrW(SerialPort1.ReadByte)
RichTextBox2.Text &= SerialPort1.ReadExisting & " " & CStr(Now) & vbCrLf
SerialPort1.Close() 'close seerial port to ready for use
Else
Message.ForeColor = Color.Red 'set message text color
Message.Image = err 'set message image
Message.Text = " Device Not Connected !"
End If
SerialPort1.Close()
End Sub
1- که اگر فرستنده نفرسته برنامه هنگ میکنه(منتظر میمونه تا بفرسته!).
میخوام بخش خواندن از پورت جدای از برنامه اصلی باشه و هروقت اطلاعاتی اومد نمایش بده و برنامه هنگ نکنه.(یعنی نیاز نباشه کلید send بشه تا از پورت بخونه )
2- دیتا های ارسال شده و دریافتی که در RichTextBox نمایش داده میشه scroll نمیشه. یعنی میخوام جدید ترین خط رو نمایش بده.
باید چیکار کنم؟
ممنون
من سورس کامل برنامه رو هم ضمیمه کردم.
ghayour
شنبه 12 اسفند 1391, 22:41 عصر
1- برای هنگ نکردن برنامه باید از thread ها استفاده کنید.
2- RichTextBox1.SelectionStart = RichTextBox1.TextLength
RichTextBox1.ScrollToCaret()
sadeghjun
یک شنبه 13 اسفند 1391, 01:37 صبح
سلام
ممنون ghayour جان
من برای خواندن از پورت از این دو خط استفاده می کنم:
associatedChar = ChrW(SerialPort1.ReadByte)
RichTextBox2.Text &= SerialPort1.ReadExisting & " " & CStr(Now) & vbCrLf
که associatedChar یه متعیر از نوع کاراکتر هست.
چه جوری باید از thread استفاده کنم.
شرمنده من تازه کارم!
فرید نجفلو
دوشنبه 14 اسفند 1391, 03:21 صبح
این associatedCharبه چه دردی می خوره؟
ندیدم جایی استفاده بشه ، به جز اینکه یک بایت از پورت کم می کنه!
اینم یه مثال برای نخ (تو قسمت خوندن پورت)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendButton.Click
If Not SerialPort1.IsOpen Then
SerialPort1.Open()
End If
DataTextBox.Select()
If SerialPort1.IsOpen = True Then
Message.ForeColor = Color.Green 'set message text color
Message.Image = ok 'set message image
Message.Text = " Device Is Connected !"
RichTextBox1.Text &= DataTextBox.Text & " " & CStr(Now) & vbCrLf 'set RichTextBox1 text = DataTextBox text
SerialPort1.Write(DataTextBox.Text) 'send DataTextBox Text to device
'___________________________________________
Dim dlg As Action = AddressOf ReadData
dlg.BeginInvoke(Nothing, Nothing)
'SerialPort1.Close() دکمه خاص خود را دارد
'___________________________________________
Else
Message.ForeColor = Color.Red 'set message text color
Message.Image = err 'set message image
Message.Text = " Device Not Connected !"
End If
'SerialPort1.Close() دکمه خاص خود را دارد
End Sub
Private Sub ReadData()
Static IsBusy As Boolean = False 'نشان دهنده مشغول بودن
If IsBusy Then Exit Sub 'اگر مشغول بود درخواست مجدد برای خواندن پورت رد می شود
Try
IsBusy = True
Dim PortData As String = SerialPort1.ReadExisting & " " & CStr(Now) & vbCrLf
Dim dlg As Action(Of String) = AddressOf AddData
Me.Invoke(dlg, {PortData}) 'دسترسی مستقیم به کنترل در نخ مجاز نمی باشد
Catch ex As Exception
Finally
IsBusy = False
End Try
End Sub
Private Sub AddData(PortData As String)
Try
RichTextBox2.AppendText(PortData)
Catch ex As Exception
End Try
End Sub
در ضمن تو قسمت باز کردن پورت از Try..Catch استفاده کنید (یک پورت غیر موجود رو تست کنید متوجه میشید)
ghayour
دوشنبه 14 اسفند 1391, 18:37 عصر
http://barnamenevis.org/showthread.php?275344-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-Threading-%D9%88-%D9%85%D8%A8%D8%A7%D8%AD%D8%AB-%D9%85%D8%B1%D8%A8%D9%88%D8%B7%D9%87-%D9%85%D8%AB%D9%84-synchronization&highlight=%D8%A2%D9%85%D9%88%D8%B2%D8%B4+thread
sadeghjun
سه شنبه 15 اسفند 1391, 21:53 عصر
ممنون ghayour و فرید جان
کدی که فرید جان داد رو من تست کردم ولی مشکل هنگ کردن بر طرف نشد.
وقتی برای خوندن پورت که از دو کد زیر استفاده می کنم:
(associatedChar = ChrW(SerialPort1.ReadByte
RichTextBox2.Text &= SerialPort1.ReadExisting & " " & CStr(Now) & vbCrLf
خط اول رو حذف می کنم هیچی در RichTextBox2 به جز زمان و تاریخ نشون نمیده! خیلی عجیبه!
sadeghjun
چهارشنبه 16 اسفند 1391, 01:06 صبح
سلام مجدد
ظاهر فعلی برنامه:
http://s2.picofile.com/file/7680529565/03_05_2013_11_44_28_%D8%A8_%D8%B8.jpg
و اما مشکلات!
من اومدم طبق آموزش اینجا (http://barnamenevis.org/showthread.p...2%D8%B4+thread)برای حل مشکل هنگ کردن برنامه (زمانی که دیتا به کامپیوتر ارسال نمیشد برنامه منتظر میماند و هنگ میکرد من میخواستم با زدن دکمه send دریافت دیتا مستقل از برنام هاصلی شروع شود) در Button1_Click یه thread تعریف کردم و آدرس اونو Recieve_Data قرار دادم بدین صورت:
Dim t As New Threading.Thread(AddressOf Recieve_Data)
t.IsBackground = True
t.Start()
و تابع Recieve_Data هم بدین صورت:
Private Sub Recieve_Data()
While True
associatedChar = ChrW(SerialPort1.ReadByte)
RichTextBox2.Text &= SerialPort1.ReadExisting & " " & CStr(Now) & vbCrLf
RichTextBox2.SelectionStart = RichTextBox2.TextLength
RichTextBox2.ScrollToCaret()
End While
End Sub
ولی وقتی برنامه رو اجرا کردم دکمه send رو زدم این پیغام رو داد:
http://s3.picofile.com/file/7680529137/03_05_2013_11_43_48_%D8%A8_%D8%B8.jpg
مشکل چیه؟!؟
یه کار دیگه هم باید کرد باید کاری کنیم که اگه Data اومد بخونه. تا بتونیم Data هم بفرستیم. ولی چه جوری باید این کار و انجام داد؟
ممنون
کد برنامه رو ضمیمه کردم.
sadeghjun
شنبه 19 اسفند 1391, 00:35 صبح
سلام
کسی نیست جواب بده!!!
ghayour
شنبه 19 اسفند 1391, 13:51 عصر
اگه بعد از تغییرات فایل کاملشو میذاشتی بهتر بود.
این مثال رو میذارم تا بتونی از روی این برای پروژه خودت thread درست کنی.
sadeghjun
پنج شنبه 22 فروردین 1392, 22:34 عصر
سلام به همه
برنامه ای که داشتم می نوشتم، کامل شد.
سورس کامل پروژه رو می ذارم برای استفاده عموم!
.
.
.
.
.
.
.
سورس کامل برنامه:
UART Tool V1.0.0 (http://nashrearzeshha.persiangig.com/other/SadeghAPP7.rar)
roya.raha
شنبه 24 فروردین 1392, 10:39 صبح
لینک خراب شده ، لطفا کنترل کنید.
تشکر
nokhodsiah2001
یک شنبه 25 فروردین 1392, 00:18 صبح
درود بر شما دوست گرامی
فقط یک پرسش چرا برای برنامه نمایه usb رو انتخاب کردی
پیروز باشی
sadeghjun
یک شنبه 25 فروردین 1392, 21:49 عصر
سلام
لینک مشکلی نداره!
دوباره امتحان کنید.
sadeghjun
یک شنبه 25 فروردین 1392, 21:51 عصر
درود بر شما دوست گرامی
فقط یک پرسش چرا برای برنامه نمایه usb رو انتخاب کردی
پیروز باشی
سلام
من یه پورت سریال مجازی از طریق پورت USB ایجاد کردم.
شماتیک مدار هم در قسمت Help برنامه هست.
HAMRAHSOFT.IR
جمعه 18 مرداد 1392, 23:17 عصر
سلام
من یه پورت سریال مجازی از طریق پورت USB ایجاد کردم.
شماتیک مدار هم در قسمت Help برنامه هست.
دوست خوب چطور یک پورت سریال مجازی از طریق پورت USB ایجاد کنیم
sadeghjun
سه شنبه 29 مرداد 1392, 00:10 صبح
دوست خوب چطور یک پورت سریال مجازی از طریق پورت USB ایجاد کنیم
سلام
وقتی شما سحت افزاری دارید که در اون از آی سی های شبیه ساز پورت USB استفاده شده مثل FT232 ، با اتصال سخت افزار و نصب درایور آی سی ، این پورت ساخته میشه.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.