PDA

View Full Version : حرفه ای: استفاده از SerialPort برای Caller ID



meisam3322
شنبه 15 بهمن 1390, 19:36 عصر
با سلام،

دوستان من از serial port برای بدست آوردن شماره تلفن کسی که تماس گرفته استفاده نموده ام که همون سیستم caller id میباشد. تلفن من شماره ها رو نشون میده ولی جهت استفاده از مودم و استفاده از AT Command تنها Ring در برنامه من نمایش داده می شود.

حالا میخواستم بدونم که آیا خط تلفن بنده از caller id پشتیبانی می کند ؟ (تلفن شماره های تماس گیرنده رو نمایش میده) یا اشکال از مودم بنده هست ؟ من 3 تا مودم عوض کردم ولی همه همون Ring رو نمایش میدن.

ممنون میشم اگه در مورد این مشکل تجربه ای دارید ، در اختیار بنده هم قرار بدین.

meisam3322
شنبه 15 بهمن 1390, 19:37 عصر
البته این دستور رو به serial port میفرستم (برای caller id) :


this.serialPort1.WriteLine("AT#cid=1");

mohammad kafiyan
شنبه 15 بهمن 1390, 20:30 عصر
سلام دوست عزیز من دو تا مودم دارم که یکی از آنها مدل zoltrix و اکسترنال که جواب گرفتم ولی مشکلی که داشت باید آنرا داخل یک thread بگذاری که اون هم گاهی وقت ها شماره را نشان می داد و گاهی وقت ها خیر اگر تونستی و جواب گرفتی کدش را بگذار با تشکر
ولی مدل مودم دومی d-link و اینترال است همانند مودم های شما پیغام ring را می ده

meisam3322
شنبه 15 بهمن 1390, 20:50 عصر
با تشکر از توجه شما،

داداش پروژه 800 تومانی من الان درگیر همین قضیه هست و همه کارهاش تموم شده. من از Thread استفاده نکردم. به این روش کار کردم :

اینها برای دریافت :


Dim WithEvents serialPort As New IO.Ports.SerialPort



Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived

txtDataReceived.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub



این هم کد اتصال به پورت :




If serialPort.IsOpen Then
serialPort.Close()
End If
Try
With serialPort
.PortName = cbbCOMPorts.Text
.Parity = IO.Ports.Parity.None
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
' .Encoding = System.Text.Encoding.Unicode
End With
serialPort.Open()
serialPort.Write("AT+VCID=1")
lblMessage.Text = cbbCOMPorts.Text & " اتصال بر قرار شد"
btnConnect.Enabled = False
btnDisconnect.Enabled = True

Catch ex As Exception
MsgBox(ex.ToString)
End Try




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

mohammad kafiyan
شنبه 15 بهمن 1390, 21:05 عصر
دوست عزیز می تونی به صورت C#‎ بگی چگونه است (برای نمایش شماره تلفن چگونه باید عمل کرد) و یک کمی روی کد هایت توضیح بدی

meisam3322
شنبه 15 بهمن 1390, 21:09 عصر
دوست عزیز میشه بگین چجوری داخل تریت گذاشتین ؟ منظورم اینه که کدوم دستورات رو داخل تریت گذاشتین؟ دستور Write یا Read رو ؟

meisam3322
شنبه 15 بهمن 1390, 21:18 عصر
Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived

txtDataReceived.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub




اون دستور اول در پست 4 ، یه رویداد برای serialport تعریف کردم. با دستور بالا اومدم داخل رویدادی که تعریف کردم. گفتم هر چیزی که پروت میخونه رو داخل تکست باکس txtDataRecieve قرار بده. البته یه تابع updateTextBox نوشتم که در کد بالا میبینی. به این صورت هست :

این هم تعریف Delegate


Public Delegate Sub myDelegate()

این هم تابع خوندن که در تکست باکس txtDataRecieved نتایج رو نشون میده


Public Sub updateTextBox()
With txtDataReceived
.Font = New Font("Tahoma", 12.0!, FontStyle.Bold)
.SelectionColor = Color.Black
.AppendText(serialPort.ReadExisting)
.ScrollToCaret()
End With
End Sub


خوب حالا هر موقع که در پورت اطلاعات رد و بدل میشه و پورت در حال خوندن هست ، میاد تابع updateTextbox رو میخونه، که نتایج داخل تکست باکس txtDataRecieved نمایش داده میشه . که همش RING لعنتی هست.

فکر کنم خیلی بد توضیح دادم نه ؟؟؟ !!:گیج:

mohammad kafiyan
شنبه 15 بهمن 1390, 22:20 عصر
سلام دوست عزیر این یک نمونه کد که برای پیدا کردن port مودم و اعمال شماره گیری روی port


private int SearchModemPort()
{
Port.Close();
for (int i = 1; i < 10; i++)
{
try
{
Port.PortName = "COM" + i;
Port.Open();
Port.Write("AT\r");
Thread.Sleep(200);
if (Port.ReadExisting().ToUpper().Contains("OK"))
return i;
Port.Close();
}
catch { MessageBox.Show("error" + Port.PortName); }
}
return 0;
}

meisam3322
شنبه 15 بهمن 1390, 22:23 عصر
سلام ، دوست عزیز ممنون از راهنمایی شما، مشکل من با پیدا کردن پورت فعال نیست. من با شماره گیری و قطع تماس و پاسخ تماس مشکل ندارم، مشکل سر این caller id هست که روی 3 تا مودم همش مقدار RING رو برام بر میگردونه :عصبانی++:

mohammad kafiyan
شنبه 15 بهمن 1390, 22:24 عصر
دوست عزیز در ویندوز hyperterminal را باز کن شماره مورد نظر را بگیر ببین شماره داخل hyperterminal می افته یا نه
یک سری دستورات at-command هستنتد که برای موارد مختلف استفاده می شوند تو همین سایت و google بگردی هست تست کن ببین کدام یکی از اینها جواب میده اگر جواب گرفتی خبری هم به ما بده
با تشکر

meisam3322
شنبه 15 بهمن 1390, 22:39 عصر
دوست عزیز دستورات را میدونم : با این دستور کالری آی دی رو فعال می کنم :


serialPort.Write("AT+VCID=1" + Convert.ToChar(13) + Convert.ToChar(10))

یا این :


serialPort.Write("AT+VCID=1")

یا



serialPort.Write("AT#CID=1");

meisam3322
شنبه 15 بهمن 1390, 22:58 عصر
دوست عزیز در ویندوز hyperterminal را باز کن شماره مورد نظر را بگیر ببین شماره داخل hyperterminal می افته یا نه
یک سری دستورات at-command هستنتد که برای موارد مختلف استفاده می شوند تو همین سایت و google بگردی هست تست کن ببین کدام یکی از اینها جواب میده اگر جواب گرفتی خبری هم به ما بده
با تشکر

محمد جان ، متاسفانه داخل hyperterminal هم فقط RING دارم. میدونم باید بعد از RING باید آیتم های زیر رو هم داشته باشم :

DATE = 0810
TIME = 1200
.
.
.
NMBR = 800111111

این NMBR لعنتی رو ندارم .... :گریه:

mohammad kafiyan
شنبه 15 بهمن 1390, 22:59 عصر
دوست عزیز توی این سایت ها سرچی انجام دادی
http://barnamenevis.org/showthread.php?233919-%D9%86%D8%AA%DB%8C%D8%AC%D9%87-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D9%87%D8%A7%DB%8C-%D9%85%D9%86-%D8%AF%D8%B1-%D8%A8%D8%A7%D8%B1%D9%87-Caller-ID-%D9%88-%D8%AA%D9%84%D9%81%D9%86-%DA%AF%D9%88%DB%8C%D8%A7&highlight=%D8%AA%D9%84%D9%81%D9%86+%DA%AF%D9%88%DB %8C%D8%A7


http://barnamenevis.org/showthread.php?218905-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AA%D9%84%D9%81%D9%86-%DA%AF%D9%88%DB%8C%D8%A7-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87&highlight=%D8%AA%D9%84%D9%81%D9%86+%DA%AF%D9%88%DB %8C%D8%A7

meisam3322
شنبه 15 بهمن 1390, 23:00 عصر
محمد جان اینجا رو هم یه نگاهی بندازی بئ نیست (http://barnamenevis.org/showthread.php?218905-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AA%D9%84%D9%81%D9%86-%DA%AF%D9%88%DB%8C%D8%A7-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87)

meisam3322
شنبه 15 بهمن 1390, 23:01 عصر
:قهقهه: فکر کنم هر دو یه لینک رو دادیم

meisam3322
شنبه 15 بهمن 1390, 23:02 عصر
لینک اولی مشکل داره ، میشه اصلاحش کنی حاجی. مرسی

meisam3322
شنبه 15 بهمن 1390, 23:05 عصر
آقا توی HyperTerminal من هم فقط Ring رو نشون میده ؟ میدونی مهنیش چیه ؟ منظورم اینه که خط تلفن من شاید اصلا کالری آیدی نداره !!! ولی چرا تلفن من شماره ها رو نشون میده ؟؟؟!!!!! :متفکر:

کدهای من درسته ، مشکل از جای دیگست. شما توی Hyper Terminal چک کردی ؟؟ نتیجه رو به من هم میگی که با چه مودم هایی انجام دادی ؟

ممنون

meisam3322
شنبه 15 بهمن 1390, 23:10 عصر
این هم یک فایل PDF که همه دستورات AT-Command رو توضیح داده . شاید بدردت بخوره

حجمش زیاد بود 2 تیکش کردم،

82046
82047

mohammad kafiyan
شنبه 15 بهمن 1390, 23:26 عصر
دوست عزیز توی همان تایپیک صفحه قبلی گفتم که مودم zoltrix جواب گرفتم
دوست عزیز تو google این را تایپ کن ببین چیزی پیدا می کنی
How To Set Up Caller ID, Including Modem Purchase Details
دو سه تا دستور atcommand را تایپیک کردم ولی با مودم d-link جواب نگرفتم

meisam3322
شنبه 15 بهمن 1390, 23:29 عصر
دوست عزیز دستور AT+VCID=1 برای من جواب میده ، توی Hyper Terminal و هم برنامه خودم ok رو میگیرم. ولی باز هم RING :عصبانی++: رو نوشن میده.


دوست عزیز توی همان تایپیک صفحه قبلی گفتم که مودم zoltrix جواب گرفتم

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

meisam3322
یک شنبه 16 بهمن 1390, 19:03 عصر
با سلام ،

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

از دوستان اگه کسی واقعا توی این قضیه تجربه داشته و با همچین مشکلی برخورد کرده ، خواهشاً توی تاپیک شرکت کنه ، قبلا خیلی در این مورد بحث شده ولی هیچ نتیجه ای نداشته .

با تشکر

mohammad kafiyan
دوشنبه 17 بهمن 1390, 00:03 صبح
سلام دوست عزیز به این آدرس رجوع کن یکی از چند حالت ممکن استت که برای شما اتفاق افتاده باشد
http://forum.majidonline.com/showthread.php?t=177930

meisam3322
دوشنبه 17 بهمن 1390, 18:07 عصر
سلام دوست عزیز به این آدرس رجوع کن یکی از چند حالت ممکن استت که برای شما اتفاق افتاده باشد
http://forum.majidonline.com/showthread.php?t=177930


با سلام،

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

ghandrz
جمعه 05 مهر 1392, 12:54 عصر
سلام، دوستانی که تو این صحفه پست گذاشتن، ممنون میشم منو راهنمایی کنید، من میخوام یه برنامه برای GSM modem بنویسم، با شکل دستوراتش تو C#آشنایی ندارم، یه منبع میخوام که بدونم چه توابع و کلاسهایی باید برا این شکل برنامه نویسی استفاده کنم؟! لطفا بهم کمک کنید اگه شد بهم کتاب ترجمه شده معرفی کنید که تهیه کنم
ممنون