تبلیغات در اینترنت
نمایش نتایج: از 1 به 4 از 4

موضوع: روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

  1. Top | #1
    کاربر ارشد


    تاریخ عضویت
    Sep 2012
    عنوان کاربر
    کاربر سایت
    محل سکونت
    karaj
    نوشته ها
    14,441
    می پسندم
    1,801
    مورد پسند : 2,620 بار در 1,471 پست
    حالت من : Khoonsard
    میزان امتیاز
    1549

    پیش فرض روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    نکته : این آموزش کامل نیست و در طی گذر زمان تکمیل خواهد شد . حتما" نواقصی در این آموزش هست که ممنون میشم اطلاع بدید . با این آموزش فقط سعی دارم مشکل خیلی از دوستان رو حل کنم . بروز رسانی این آموزش ممکن کمی طول بکشه اونم به خاطر مشغله کاری بنده است پس لطفا" کمی صبر پیشه کنید . این آموزش رو هم روی ویندوز 7 و هم xp تست کردم و از کارش مطمئن هستم . سعی کنید در خوندن مطالب کمی دقت کنید . سعی می کنم شیوا و بلیغ بنویسم .

    خیلی از دوستان هستند که می خوان نرم افزارهای تلفن گویا بسازند و تا بخشهایی هم پیش رفتند اما در مواردی به مشکلاتی خوردند که کار رو رها کردند . می خوام در این بخش آموزش ساخت یه تلفن گویا رو قرار بدم تا همه از ازش استفاده کنند . من برای این آموزش از Delphi 7 ، KDTele 3.6.71 و مودم Intel 3Chip یا Zoltrix 3 chip یا Alfex $chip استفاده کردم این آموزش با هر سه این مودم ها سازگاره . کمی تفاوت هست که اون ها رو هم توضیح می دم . برای شروع به چند تا ابزار نیاز داریم و کمی توضیحات
    1-مطمئن بشید که درایور مودمی که روی سیستم نصب دارید به روز باشه برای بروز رسانی کافیه به سایت سازنده مودم برید و درایور جدید رو دانلود کنید و نصب کنید .

    2-به برنامه Hyper Terminal نیاز هست . اگه از Windows xp استفاده می کنید می تونید از مسیر زیر به Hyper Terminal دسترسی داشته باشید
    Hyper Terminal : Start > All Programs > Accessories > Comunication > Hyper Terminal


    برای اجرای Hyper Terminal یک راه دیگه هم هست . از مسیر زیر هم می تونید Hyper Terminal رو باز کنید
    Hyper Terminal : Start > Run > hypertrm


    اگه از ویندوزی غیر از xp استفاده می کنید این [برای مشاهده لینک ها ثبت نام کنید] رو دانلود کنید و فقط برنامه رو اجرا کنید
    Hyper Terminal


    نکته : این مطلب رو توجه داشته باشید برای اجرای صحیح Hyper Terminal روی ویندوز 7 و ویستا روی فایل اجرایی راست کلیک کنید و Run as Administrator رو بزنید .

    3-به کامپوننت KDTele هم نیاز دارید . چون توی سایت فعالیت warez ممنوع هست برای همین به این ایمیل درخواست بزنید تا براتون ارسال کنم .

    4-دلفی 7 هم حتما" نصب دارید دیگه و اونو نیازی نیست براتون بذارم .

    5-برای نصب KDTele هم که باید به منوی Component برید . در تصویر زیر این منو نمایش داده شده . بعد از باز کردن منوی Component گزینه Install Packages رو انتخاب کنید . تا پنجره تصویر باز بشه .


    7-با زدن Install Component این پنجره باز میشه


    8-گزینه Add رو بزنید تا این پنجره باز بشه بعد از باز شدن این پنجره به مسیری برید که KDTele رو اونجا قرار دادید . مثلا" D:\KDTele\lib\Delphi7

    9-بعد از این کار فایل KDTeleDelphi7.bpl رو انتخاب کنید و open رو بزنید . به همین راحتی KDTele رو نصب کردید .

    10-دلفی رو ببندید . چون الان باهاش کاری نداریم . می خوایم یکی از مشکلات رو بررسی و حل کنیم . اون مشکل هم چیزی جز Caller ID نیست . برای بررسی و حل این مشکل فارغ از منطقه مخابراتی باید بررسی کنیم که مودم Caller ID رو پشتیبانی می کنه یا نه . برای این که اینو بفهمیم اول Hyper Terminal رو به یکی از روش هایی که گفتم باز کنید .





    11-اگه دقت کنید من برای باز کردن Hyper Terminal روی برنامه راست کلیک کردم و Run as Administrator رو زدم . بعد از باز شدن برنامه این پنجره میاد


    12-وقتی این پنجره اومد گزینه No رو بزنید تا پنجره بعدی باز بشه .

    13-وقتی این پنجره باز شد گزینه Cancel رو بزنید تا بتونید کار کنید .

    a.نکته : الان هر چی شما اینجا تایپ کنید رو نمی بینید . پس به دقت به دستوراتی که در ادامه آوردم دقت کنید . برای بررسی Caller ID از AT Command استفاده می کنیم . این دستورات رو همونطور که نوشتم تو Hyper Terminal تایپ کنید تا پیغام OK بگیرید . اگه بعد از تایپ و زدن Enter براتون Error اومد یعنی مودم شما این دستور رو پشتیبانی نمی کنه البته نگران نباشید اکثر مودم ها این دستورات رو پشتیبانی می کنند .

    14-خب اولین دستور برای آماده سازی مودم هست به ترتیب دستورات زیر را تایپ کنید بعد از تایپ هر دستور Enter رو بزنید تا تایید بشه . دقت کنید که حتما ok بگیرید .
    AT

    AT&F&C1&D2

    AT+FCLASS=?

    AT+GCI=B4

    AT+VCID=1


    می خوام این دستورات رو توضیح بدم که چی هستند و چه می کنند . اگه برای همه این ها OK گرفتید مطمدن باشید مودمتون Caller ID رو پشتیبانی می کنه

    AT : این اولین دستور هست که مودم رو برای دریافت دستورات AT آماده می کنه . اگه بعد از وارد کردن این دستور OK دریافت کردید یعنی مودم شما از AT Command پشتیبانی می کنه .

    AT&F&C1&D2 : این گزینه این امکان رو به شما می ده که تمام اتفاقات توی مودم رو بتونید ببینید حتی کلماتی رو که تایپ می کنید رو هم می تونید با این دستور ببینید .

    AT+FCLASS=? : این دستور وضعیت و امکانات واقعی مودم رو براتون بر می گردونه . اگه توی اعدادی که برگشت داده عدد 8 وجود داشته باشه یعنی مودم شما هم از Caller ID و هم از Voice پشتیبانی می کنه .

    AT+GCI=B4 : این دستور وضعیت جغرافیایی و منطقه ای مودم را فعال می کنه . این گزینه برای فعال سازی Caller ID الزامی هست .

    AT+VCID=1 : این گزینه هم Caller ID رو فعال می کنه . اگه به جای 1 عدد 0 رو بزنید Caller ID غیر فعال میشه و اگه عدد 2 رو بزنید بصورت فرا منطقه ای تنظیم میشه .

    نکته : برای اینکه وضعیت هر کدوم از این دستورات رو ببینید کافیه به جای اون عدد یه علامت ؟ بذارید تا وضعیت رو براتون برگردونه . بعد از اینکه مطمئن شدید که همه دستورات رو ok داده سیم تلفن رو به مودم وصل کنید و با اون شماره ارتباط برقرار کنید اگه همه چی رو درست انجام داده باشید باید یه همچین پیغامی رو روی Hyper Terminal دریافت کنید :
    Ring



    Date=0201

    Time=1520

    NMBR=09123456789



    Ring


    Ring : بهتون می گه که خط داره زنگ می خورم .

    Date : تاریخ تماس رو بر می گردونه .

    Time : زمان تماس رو برمی گردونه .

    NMBR : هم که شماره تماس گیرنده رو بر میگردونه .


    خب کارمون با Hyper Terminal تموم شد . می تونید اونو ببندید . در بخش بعدی ساختن یه تلفن گویا یا همون منشی تلفنی رو شروع می کنیم .

  2. # ADS
    دیده شوید، موفق شوید
    تاریخ عضویت
    -
    محل سکونت
    -
    سن
    2010
    نوشته ها
    -

    تبلیغات شما
     

  3. Top | #2
    کاربر ارشد


    تاریخ عضویت
    Sep 2012
    عنوان کاربر
    کاربر سایت
    محل سکونت
    karaj
    نوشته ها
    14,441
    می پسندم
    1,801
    مورد پسند : 2,620 بار در 1,471 پست
    حالت من : Khoonsard
    میزان امتیاز
    1549

    پیش فرض پاسخ : روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    در بخش اول امکانات مودم رو بررسی کردیم و با چند تا دستور AT تونستیم بفهمیم که آیا مودم ما Caller ID و Voice داره یا نه . در این بخش می خوام شروع به ساخت برنامه بکنم . توجه داشته باشید که من از روش تجربی و تحقیقی خودم برای ایجاد این برنامه استفاده می کنم . البته سعی می کنم عمومیت بیشتری بهش بدم . اما شما می تونید این کدها رو هر جور که صلاح می دونید استفاده کنید . ممنون میشم اگه اشکالات روبهم گوشزد کنید تا این آموزش بهتر و بهتر بشه .
    ایجاد برنامه :
    1-دلفی رو باز کنید و یه پروژه جدید ایجاد کنید .
    2-مانند شکل زیر به KDTele Tab برید و KDSerialPort رو انتخاب کنید و روی فرمتون قرار بدید .


    3-در مرحله بعد نیاز داریم که KDSerialPort رو تنظیم کنیم . برای این کار KDSerialPortی که روی فرم گذاشتید انتخاب کنید و به پنجره object inpector برید . در لیست Property های KDSerialPortPropertyی به نام ManualSettings هست . بازش کنید و در قسمت Port عدد 3 رو وارد کنید .
    نکته : این عدد 3 چی هست ؟ هر مودمی که روی سیستم نصب میشه یک Port رو برای خودش اشغال می کنه . در حالت عادی مودم Port 3 یا Com 3 رو برای خودش اشغال می کنه که پیش فرض اکثر مودمها هم هست . به همین دلیل من خواستم عدد 3 رو وارد کنید . اما از کجا بفهمیم Port مودم ما چی هست . برای اینکار به مسیر زیر برید :
    Control Panel > Phone And Modem Option > Modems Tab >
    در این پنجره نام مودم های نصب شده بر روی سیستم لیست شده و در مقابلش هم لیست portهایی که مودم اشغال کرده هم لیست شده . از اینجا می تونید بفهمید که مودم روی کدام Port نصب هست . تصاویر زیر مطالب بالا رونشان می دهند .
    4-خب Port که تنظیم شد . نیاز به نوشتن مقداری کد داریم . از این به بعد تصور من اینه که شما می دونید Property و Event چی هستند و در دلفی کجا قرار دارند . با این تصور من فقط توضیح متنی میذارم . خب اول KDSerialPort رو انتخاب کنید . به object inspector برید و Events رو انتخاب کنید . onPortState رو از بخش Events دوبار کلیک کنید تا محیط کد نویسی دلفی باز بشه . این Event این امکان رو به شما میده که وضعیت port ی که روش کار می کنید رو براتون مانیتور کنه . حالا این دستور رو براش بنویسید :
    procedure TForm1.KDSerialPort1PortState(Sender: TObject;
    PortState: TPortState; Param1: Integer);
    begin
    case PortState of
    psOpened : ShowMessage('پورت باز شد');
    psClosed : ShowMessage('پورت بسته شد');
    psError : ShowMessage('خطا در فعاليت پورت');
    end;
    end;

    این قطعه کد وضعیت Port رو براتون بر می گردونه من از MessageBox استفاده کردم . شما از هر چی که دوست دارید می تونید استفاده کنید .
    5-روی فرمتون کلیک کنید . به object inspector برید و از Events های فرمتون OnShow رو انتخاب کنید و دوبار کلیک کنید تا محیط دلفی باز بشه . این کد رو در این بخش بنویسید :
    procedure TForm1.FormShow(Sender: TObject);
    var
    pORes : Integer;
    begin
    if KDSerialPort1.IsOpened then
    begin
    KDSerialPort1.Close;
    end
    else if not KDSerialPort1.IsOpened then
    begin
    pORes := KDSerialPort1.Open(0);
    if pORes = 0 then
    begin
    KDSerialPort1.SendString('AT' + #13);
    KDSerialPort1.SendString('AT&F*C1&D2' + #13);
    KDSerialPort1.SendString('AT+GCI=B4' + #13);
    KDSerialPort1.SendString('AT+VCID=1' + #13);
    end;
    end;
    end;
    نکته :
    1-اگر کمی دقت کنید می بینید که این کدها همان دستورات AT هستند که در بخش قبل در Hyper Terminal نوشتیم و اجرا کردیم . پس اگر مودم شما این دستورات را پشتیبانی می کنه این ها رو اینجا بنویسید .
    2-در این کد من اول بررسی کردم که Port باز هست یا نه . دلیلش هم اینه که ممکنه مودم توسط برنامه دیگه ای در حال اجرا باشه . در اینصورت Port در حالت Busy هست . برای همین اول بررسی می کنم که باز هست یا نه و اگه باز بود با دستور KDSerialPort1.Close; پورت رو می بندم .
    3-در بخش بعدی بررسی می کنم اگه پورت باز نبود . ابتدا پورت رو با دستور KDSerialPort.Open(0); باز می کنم . و بعد دستورات AT رو توسط KDSerialPort.SendString(); به مودم ارسال می کنم تا مودم رو برای فعالیت آماده کنم .
    نکته : اگر دقت کنید میبینید که قبل از KDSerialPort.Open(0); یک متغیر عددی آوردم . این دستور در صورت موفقیت یا عدم موفقیت یک عدد رو بر می گردونه که با اون عدد میشه در مورد خطاها تصمیم گیری کرد . لیست خطا های مربوط به KDTele رو در پایان این آموزش براتون میارم.
    i.در آخر اگر مقدار pORes = 0 بود دستورات AT رو به مودم ارسال می کنم تا مودم به محض برقراری تماس ورودی بتونه شماره تماس گیرنده رو شناسائی کنه .
    6-ما دستورات مورد نیاز رو به مودم ارسال کردیم . اما در برنامه چه جوری بفهمیم که مودم در حال زنگ خوردن هست و چه اتفاقی برای مودم داره میفته . برای اینکار ابتدا باید KDSerialPortی که روی فرم گذاشتید رو انتخاب کنید و به object inspector برید و Events رو انتخاب کنید . در بخش Events یک Event به نام onReciveData وجود داره که اطلاعات روی پورت یا مودم رو براتون می خونه .اما چه جوری باید این اطلاعات رو ببینیم . اول از همه یک Memo از Standard Tab روی فرمتون بذارید . سپس روی onReciveData مربوط به KDSerialPort 2 بار کلیک کنید تا محیط کد نویسی دلفی باز بشه . حالا این کد رو در این بخش بنویسید :
    procedure TForm1.KDSerialPort1ReceiveData(Sender: TObject;
    DataPtr: Pointer; DataSize: Integer; var DisplayHandle: HWND;
    var IsDisplayUNICODE: Boolean);
    begin
    DisplayHandle := Memo1.Handle;
    KDSerialPort1.BufferIn.FindString(0, '', False);
    end;
    نکته : حتما در بخش Property مربوط به KDSerialPort در object inspector در گزینه Bufferln گزینه Enabled = True باشه . اما در مورد این کد :
    1-در این Event 2 تا متغیر داریم به نام های DisplayHandle و IsDiplayUNICODE که یکی از نوع HWND هست و یکی از نوع Boolean .
    DisplayHandle : این امکان رو به شما میده تا اتفاقات روی پورت و یا مودم در یک Memo یا ListBox نمایش بدید و از اتفاقات مطلع بشید .
    IsDisplayUNICODE : این متغیر برای زمانی هست که روی پورت و یا مودم اطلاعات غیر از کاراکترهای English روی مودم ارسال باشه . با True یا False کردن این گزینه این امکان رو می تونید کنترل کنید .
    2-DisplayHandle که مشخص هست من به Memo نسبت دادم . اما خط دوم این Event اطلاعات مورد نیاز از روی پورت یا مودم رو می خونه . عدد 0 به نشانه اینه که از Index 0 رشته هایی که برگشته اند شروع به خوندن کن . ‘’ در این بخش شما هر کاراکتری رو می تونید قرار بدید کثلا" اگر دنبال کلماتی که با N شروع می شوند می گردید . اونجا باید ‘N’ رو وارد کنید . اما گزینه آخر این گزینه برای اینه که مشخص کنید که حساس به کلمات باشه یا نه . یعنی Case Sensetive باشه یا نه من اینجا False گذاشتم تا حساسیتی به بزرگی و کوچکی کلمات نشان نده و همه رو برام لیست کنه . خب از اینجا به بعد می خوام شماره سریال رو پیدا کنم و تو یک MessageBox نمایش بدم . در ادامه همون کد قبلی این کد رو هم اضافه کنید .
    نکته : این روش اختصاصیه منه . شما از هر روش دیگه که دوست دارید می تونید استفاده کنید .

  4. Top | #3
    کاربر ارشد


    تاریخ عضویت
    Sep 2012
    عنوان کاربر
    کاربر سایت
    محل سکونت
    karaj
    نوشته ها
    14,441
    می پسندم
    1,801
    مورد پسند : 2,620 بار در 1,471 پست
    حالت من : Khoonsard
    میزان امتیاز
    1549

    پیش فرض پاسخ : روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    در 2 بخش قبلی یه سری مطالب در مورد مودم و کار با پورت رو براتون نوشتم . اینجا می خوام اون مطالب رو ادامه بدم . به انتهای بخش قبل برگردیم :
    procedure TForm1.KDSerialPort1ReceiveData(Sender: TObject;
    DataPtr: Pointer; DataSize: Integer; var DisplayHandle: HWND;
    var IsDisplayUNICODE: Boolean);
    var
    TTelNumber : String;
    begin
    DisplayHandle := Memo1.Handle;
    KDSerialPort1.BufferIn.FindString(0, '', False);
    end;
    اینجا ما تونستیم اطلاعات رو نشون بدیم . حالا من از روش اختصاصی خودم برای نمایش Caller ID استفاده می کنم . بعد از کد KDSerialPort1.BufferIn.FindString(0, '', False); این دستور یا هر دستوری که احساس می کنید درست هست رو قرار بدید :
    if Memo1.Lines.Count = 13 then
    begin
    KDSerialPort1.Close;
    //این بخش توضیح دارد
    TTelNumber := Memo1.Lines.ValueFromIndex[12];
    Delete(TTelNumber, 0, 7);
    ShowMessage(TTelNumber);
    end;
    فکر می کنم درک کد ساده باشه !؟ اینجا گفتم اگه تعداد خط های موجود در Memo1 به 13 رسید . پورت رو ببند . اینکار باعث میشه که پورت دیگه فعال نباشه .
    نکته ( مهم ) : از همون KDTele Tools Tab یک KDPhone روی فرم قرار بدید تا بتونید بعدا" ازش استفاده کنید .
    یک متغیر رشته ای دارم که باید خط مورد نظر رو در اون قرار بدم . حالا از کجا بفهمم این خط کجاست و چیه ! ؟
    وقتی که دستورات AT رو به سمت مودم ارسال می کنید و اونو آماده می کنید بعد از اعلان Ring در Hyper Terminal زمان و تاریخ تماس و یه گزینه دیگه که NMBR = XXXXXXX هست رو نشون می ده . من تصور کردم که این گزینه در خط 12 هست ممکنه در کد نویسی شما در خط دیگه ای باشه که می تونید اینو به راحتی پیدا کنید . در بخش بعد با دستور DELETE مقداری که نیاز نبود رو حذف کردم و در پایان هم توسط ShowMessage اونو نمایش دادم . براتون یک نمونه از کدی که از اول تا الان در موردش صحبت شده رو می ذارم تا بهتر درک کنید .
    توضیح : سعی میکنم از این به بعد سریعتر این مطالب رو در اختیارتون بذارم تا استفاده کنید .

  5. Top | #4
    http://up.vbiran.ir/uploads/137337199137672_Karbar%20Site.png


    تاریخ عضویت
    Feb 2014
    عنوان کاربر
    کاربر انجمن
    نوشته ها
    1
    می پسندم
    0
    مورد پسند : 0 بار در 0 پست
    میزان امتیاز
    0

    پیش فرض پاسخ : روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    سلام .من از دستورات زیربرای گرفتن caller-id استفاده کردم . اما متاسفانه فقط زنگ خوردن را تشخیص می دهد(ok RING RING RING)

    AT+FCLASS عدد 8 را شامل نمیشه که البته فکر کنم برای پشتیبانی از voice باید 8 باشه و فقط برای گرفتن caller-id نیازی به آن نیست چون فقط یک بار بصورت اتفاقی caller-id را نمایش داد.

    البته روی مودمی که voice پشتیبانی میکنه هم امتحان کردم اما جواب نگرفتم.برنامه C# است

    serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataRec eived);

    string port = cbPort.SelectedItem.ToString();

    serialPort1.PortName = port;

    serialPort1.RtsEnable = true;

    serialPort1.BaudRate = 9600;

    serialPort1.DataBits = 8;

    serialPort1.RtsEnable = true;

    serialPort1.Open();

    serialPort1.WriteLine("AT" + System.Environment.NewLine);

    serialPort1.WriteLine("ATZ" + System.Environment.NewLine);

    serialPort1.WriteLine("AT&F&C1&D2" + System.Environment.NewLine);

    serialPort1.WriteLine("AT+FCLASS=?" + "ModemClass" + System.Environment.NewLine);

    serialPort1.WriteLine("AT+GCI=B4" + System.Environment.NewLine);

    serialPort1.WriteLine("AT+VCID=1" + ",EnableModem" + System.Environment.NewLine);


    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
    textBox1.Text += serialPort1.ReadExisting();


    }





اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
صنایع فلزی صانع
Responsive Design
تماس با مدیریت سایت : 09357816755