PDA

View Full Version : دریافت OK از پورت سریال با تاخیر زیاد



Michka
پنج شنبه 28 آذر 1387, 14:51 عصر
سلام
من تو VB 2008 با استفاده از Serialport یه نرم افزار ارسال SMS نوشتم. حالا مشکلم اینه که وقتی یه PDU رو به مودم می فرستم جواب OK اون آنقدر دیر در روال DataRecived خوانده می شده که من نمی تونم فرستاده شدن SMS رو به درستی چک کنم.

من برای دریافت جواب از مودم از این کد استفاده می کنم:
myData = myData & SerialPort1.ReadExisting()


MerC
Michka

Michka
شنبه 30 آذر 1387, 19:18 عصر
سلام
مشکلمو حل کردم

مهمترین مشکلم این بود که نمی تونستم تشخیص بدم SMS فرستاده شده یا نه
حالا اومدم با گذاشتن یه حلقه GOTo و چک کردن اینکه در خروجی حتما یکی از دو عبارت OK یا ERROR وجود داشته باشه اجرای برنامه رو به تاخیر انداختم.

reza6384
شنبه 14 دی 1387, 23:25 عصر
حالا اومدم با گذاشتن یه حلقه GOTo و چک کردن اینکه در خروجی حتما یکی از دو عبارت OK یا ERROR وجود داشته باشه اجرای برنامه رو به تاخیر انداختم.


دوست عزیز با این کار بار زیادی رو به سیستم تحمیل می کنید.

وقتی که sms ارسال میشه یک رشته حاوی زیر رشته "CMGS+" و زیررشته "OK" میاد . من کدی که نوشتم در رویداد DataReceived چک می کردم که رشته رسیده شده آیا شامل اینها هست یا نه و در صورت مثبت بودن جواب SMS ارسال شده.
البته یک چیزی هم بگم. وقتی از SerialPort.ReadExisting استفاده کنید Buffer خالی میشه.
پس بهتره وقتی بافر رو می خونید در یک متغیر String قرارش بدین.

در هر صورت فکر کنم مشکل شما رو باز هم دقیقا متوجه نشدم.

این هم کد نمونه خودم :
البته یک قسمت هاییش رو حذف کردم ولی مفهوم رو می رسونه که رشته ورودی از پورت ممکنه حالت های زیر رو برسونه
sms ارسال شده
sms دریافت شده
sms به مقصد رسیده
زنگ خوردن
خطا در ارسال
.....



Try
Dim TimeStr As String
TimeStr = Now.Hour & ":" & Now.Minute & ":" & Now.Second & ":" & Now.Millisecond
'-------------------------------------------------------------

Me.PortBuffer = MySerialPort.ReadExisting

Me.BufferLog += vbCrLf & Me.PortBuffer
'-------------------------------------------------------------
If PortBuffer.Contains("+CMGS:") And PortBuffer.Contains("OK") Then
Msgbox("Message Sent")
ElseIf PortBuffer.Contains("RING") Or PortBuffer.Contains("CLIP") Then
If Not Me.FirstRingForInitialize Then
My.Computer.Audio.Play("C:\Sounds\Ringing.Wav")
End If
ElseIf PortBuffer.Contains("CMTI") Then
My.Computer.Audio.Play("C:\Sounds\NokiaSms.Wav")
ElseIf PortBuffer.Contains("CDS") Then
My.Computer.Audio.Play("C:\Sounds\Delivery.Wav")
PD.DecodeDeliveryReport(Me.PortBuffer)
End If
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace, MsgBoxStyle.Exclamation, "Error")
End Try