NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4238 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 4 1234 آخرینآخرین
نمایش نتایج: از 1 به 20 از 66

موضوع: چگونگی شناسائی اتوماتیک پورت comو خواص آن در vb.net

  1. #1
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض چگونگی شناسائی اتوماتیک پورت comو خواص آن در vb.net

    سلام

    کسی می دونه که چطور میشه با VB.NET برنامه ای نوشت که خودش بتونه لیست پورت های COM مورد استفاده در قسمت Device Manager رو پیدا کنه و خواص هر پورت رو بفهمه؟ مثلا میزان باودریت ، شماره پورت ، فعال بودن یا نبون Hand Shak و ...

    فکر می کنم این برنامه یکم اختصاصیه و خوراک بهنام باشه! نه؟
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    23
    تشکر
    4
    تشکر شده 16 بار در 11 پست

    پیش فرض

    VB.NET
    کد:
    Imports System.IO.Ports
    کد:
    Dim mysp As New SerialPort
    Dim pnames() As String
    pnames = SerialPort.GetPortNames()
    
    For i As Integer = 1 To pnames.Length
    cbPN.Items.Add(pnames(i - 1))
    Next
    خواص که سخت افزار شما زمان وصل شدن تایین می کنه، تنظیمات dm کار خاصی انجام نمی دن و برنامه به راحتی می تونه override کنه، اما اگه منزور پرت باز شده هست، فکر نمی کنم با .net بشه.
    اگر هم پرت بسته است، تک تک پرت ها را باید باز کرد و چک کرد.
    منطقی ترین راه اینه که سخت افزار مرتب 2 کاراکتر پشت سر هم بفرسته، شما توی نرم افزار با بادریت های مختلف مثلا از 300+ شروع به چک کردن می کنین، روی هر پرت با یک تاخیری ورودی می خونین هر موقع AB یا BA رسید می تونین baud رو درست فرض کنین، لاقل توی صنعت این روش کاربرد داره، روش های دیگه ام هست، مثلا سخت افزار TXD برای یه مدت مشخص که پروتوکل شده است high نگه می داره، portبعد بافر خودش رو مرتب چک کنه اگه چیزی نرسید دوباره TXD ... با نرم افزار port باز می شه، چند بار اندازه می گیره، با baud مورد نظر یه پیام توقف میفرسته که می تونه بگه handshake و ... تنظیمات ثانویه چی باشه.

    روشه هم که من استفاده می کنم، سخت افزار و نرم افزار هر دو 38400 پرت باز می کنن، نرم افزار یکی یکی پرت ها رو چک می کنه، هر موقع A رسید، وضعیت درسته!

  4. تشکرها از این نوشته :


  5. #3
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    سلام دادا

    منظور من پورت باز شده نیست. همه ی ما می دونیم که 256 تا پورت کام توی Device Manager وجود داره که معمولا فقط 4 - 5 تاش مورد استفاده هستن ، حالا ما می خوایم از بین این 256 تا اون پورتی که مد نظر خودمون هست پیدا کنیم.

    برای مثال من یه مبدل پورت USB به COM رو وصل می کنم به پورت USB در این زمان این مبدل به جای یکی از پورت های COM شماره 1 تا 256 قرار می گیره. حالا من می خوام برنامه ام توی VB.NET بیاد اولا شماره ی این پورت که درواقع همون مبدل هست رو پیدا کنه و ثانیا مقدار باودریت رو تشخیص بده و احیانا سایر موارد. (فعلا این دو مورد در اولویت هستن)

    البته روشی که برای تشخیص میزان باودریت گفتید جالبه ريال ولی من فکر می کنم که باید راهی آسونتر برای این مقصود وجود داشته باشه.

    راستی اگه ممکنه یه مقدار راجع به کدی که گذاشتید توضیح بدید!
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  6. #4
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    روشی که دوست عزیز گذاشتن، میاد نام تمامی پورتهای سریال که در سیستم تعریف شده رو برمیگردونه. و در یک combo box که تعریف کردن میریزه.

    از ادرس زیر میتونید لیست پورت ها رو ببینید:

    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

    با قطعه کد زیر هم میونید به پیکربندی پورت سریال دسترسی داشته باشید:

    [PHP]
    Private Sub GetPortInfo()


    Dim searcher As New ManagementObjectSearcher("select * from Win32_SerialPortConfiguration")

    Try
    For Each share As ManagementObject In searcher.[Get]()


    Try
    textBox1.Text += share("Name").ToString() + vbCr & vbLf
    Catch
    textBox1.Text += share.ToString() + vbCr & vbLf
    End Try

    If share.Properties.Count <= 0 Then
    MessageBox.Show("No Information")
    Return
    End If

    For Each PC As PropertyData In share.Properties


    textBox1.Text += PC.Name + ": "

    If PC.Value IsNot Nothing AndAlso PC.Value.ToString() <> "" Then
    Select Case PC.Value.[GetType]().ToString()
    Case "System.String[]"
    Dim str As String() = DirectCast(PC.Value, String())

    Dim str2 As String = ""
    For Each st As String In str
    str2 += st + " "
    Next

    textBox1.Text += str2 + vbCr & vbLf

    Exit Select
    Case "System.UInt16[]"
    Dim shortData As UShort() = DirectCast(PC.Value, UShort())


    Dim tstr2 As String = ""
    For Each st As UShort In shortData
    tstr2 += st.ToString() + " "
    Next

    textBox1.Text += tstr2 + vbCr & vbLf

    Exit Select
    Case Else

    textBox1.Text += PC.Value.ToString() + vbCr & vbLf
    Exit Select
    End Select

    End If
    Next
    Next

    Catch
    End Try

    End Sub

    [/PHP]

  7. کاربران : 2 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  8. #5
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    ممنون بهنام جان

    من قطعه کد بالارو کپی کردم توی ویژوال استودیو 2010 در یک پروژه ی VB.net اما موقع اجرا کردن از قسمت ManagementObjectSearcher ایراد می گیره!

    الان کد علاوه بر استخراج اطلاعات پیکره بندی پورت ، شماره ی پورت رو هم مشخص می کنه؟
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  9. #6
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    فضای نام system.management رو اضافه کن، همچنین اگه رفرنس system,.management.dll به پروژه اضافه نشده بود، ضاافه کن...

    بله شماره پورت رو هم میده. در اصل این روشی که اینجا اوردم، نه فقط برای پورت سریال، بلکه برای مشاهده پیکربندی سیستم به کار میره...

  10. #7
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    Exclamation

    بهنام جان هر کاری میکنم نمیشه

    فضای نام system.management رو اضافه کردم رفرنسشم خودش داشت ولی باز از همون قسمت ایراد میگیره
    اگه میشه فقط همین تکه کد رو توی پروژه ی vb.net کامپایل کن و ضمیمه کن .
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  11. #8
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    دو قطعه کد گذاشتم... یکی این، یکی هم مثل روشی که دوستمون در این تاپیک گذاشتن...

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

  12. کاربران : 5 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  13. #9
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    23
    تشکر
    4
    تشکر شده 16 بار در 11 پست

    پیش فرض

    روشی که خودم گفتم + روش دوست عزیز رو پیوست (البته فقط کامپایل شدنی )کردم.
    ABR یا Automatic baud rate detection
    تنها فکر می کنم با نمونه برداری ممکن هست و دیگر هیچ!
    چون فقط سیگنالی که دارین، جنسش از نوع خود کلاک شده هست
    حالا من می خوام برنامه ام توی VB.NET بیاد اولا شماره ی این پورت که درواقع همون مبدل هست رو پیدا کنه و ثانیا مقدار باودریت رو تشخیص بده و احیانا سایر موارد. (فعلا این دو مورد در اولویت هستن)
    منظوررتون از این قسمت چی هست، baud و شما تعیین نمی کنین، یعنی سخت افزار و شما توافق می کنین، که با چه سرعتی حرف بزنین، موقعی که از توافق نامه اطلاع ندارین، فکر نمی کنم راهی بجز آزمایش وجود داشته باشه، بخصوص اگر از سری های FT232 استفاده می بکنین، حتی اگه پرت با baud اشتباه باز کنین، مجبورین کل این ic ریست کنین(ورژن های قدیمی). چون خودش بقیه تنظیمات و از روی packet تشخیض می داد، مگر این که با سرعت بیشتر اون هم از مضربی از سرعت اصلی باز کنین.

    البته تشخیص baud روی سخت افزار کمی جالب تره، کافی با تایمر 1 زمان و اندازه بگیرید، بعدش ...
    در مورد تشخیص هم که کارو آسون تر کردین، کافی vendor id, pid و بدونین روی device قفل کنین

    ref:
    http://stackoverflow.com/questions/3...r-using-vb-net
    http://www.pjrc.com/tech/8051/autobaud.html
    http://social.msdn.microsoft.com/For...6-680a5d24d845
    http://en.wikipedia.org/wiki/Automat...rate_detection
    http://social.msdn.microsoft.com/For...6-24f625186c5d
    فايل هاي پيوست شده فايل هاي پيوست شده
    ویرایش توسط ama_trig : 13-06-2012 در ساعت 23:17

  14. کاربران : 2 تشکر کرده اند از شما ama_trig برای ارسال این پست سودمند:


  15. #10
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    23
    تشکر
    4
    تشکر شده 16 بار در 11 پست

    پیش فرض

    اینهم برای سکن هاب
    کد:
            Dim mos As New ManagementObjectSearcher("SELECT * FROM Win32_USBHub")
    
            For Each mo As ManagementObject In mos.Get()
                MessageBox.Show(mo.Properties.Item("Description").Value + vbCrLf + mo.Properties.Item("DeviceID").Value)
            Next

  16. #11
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    من از این روش، برای بدست اوردن مو به مو جزئیات سیستم استفاده میکنم...

  17. تشکرها از این نوشته :

    KHM

  18. #12
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    ممنون از هر دو عزیز

    الان فقط یه مشکلی هست!

    ببینید من وقتی از توی رجیستری میرم و نگاه می کنم چهارتا از پورت های COM من اونجا هستن که به ترتیب اینجوریه COM2 و COM4 و COM1 و COM8 ، وقتی هم که کدهای شمارو اجرا می کنم دقیقا همین چهارتا پورت توی کمبو باکس ظاهر میشه. ولی موقع دریافت خواص هر پورت ، بجز پورت COM8 خواص بقیه مو به مو نشون داده میشه.

    حالا پورت COM8 چیه؟ دقیقا همون پورتیه که من بهش مبدل USB to COM وصل کردم!

    بنظر شما قضیه چیه؟
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  19. #13
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    نام پورت 8 چی هست؟

    وقتی که مبدل رو میکشی از تو رجیستری حذف میشه؟

  20. #14
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    وقتی که مبدل رو میکشی از تو رجیستری حذف میشه؟
    آره دادا ، حذف میشه. وقتی هم که می زنمش به یه پورت دیگه شماره پورت کامش عوض میشه که طبیعیه ، هم توی Device Manager عوض میشه هم توی رجیستری و هم توی برنامه ای که گذاشتین. ولی بازم موقع نمایش خواص اسم این پورت رو نشون نمیده.

    من دوتا عکس از Device Manager و رجیستری پیوست کردم که اسمشم توی عکس مشخصه.
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Device M.PNG
مشاهده: 30
حجم: 52.2 کیلو بایت   برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Reg.PNG
مشاهده: 21
حجم: 53.6 کیلو بایت  
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  21. #15
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    ببینید من در اصل هدفم اینه که پروژه هایی که با VB.NET و AVR ارائه میدم خودش بطور اتوماتیک بتونه پورت COM مربوطه رو پیدا کنه و شروع به تبادل اطلاعات کنه و در صورت لزوم وضعیت باودریت ، DTR و RTS رو تغییر بده.

    مثلا فرض کنید با میکرو برنامه ای نوشتیم که هر ثانیه اطلاعات دما رو می فرسته به کامپیوتر ، ما از یک مبدل COM to USB استفاده می کنیم. و برد میکرو رو وصل می کنیم به کامپیوتر ، حالا برنامه ی ویژوال باید داده هارو دریافت کنه و مثلا توی یه تکست باکس نشون بده.

    در حالت عادی فرد برای ایجاد ارتباط بین سخت افزار و برنامه ی ویژوال باید اول بره توی Device Manager و ببینه که مبدل چه شماره ای از پورت COM رو داره و مقدار باودریت چقدره ، بعد بیاد توی برنامه ویژوال از یه کمبو باکس شماره پورت و باودریت رو ست کنه.

    اما من می خوام کل این فرایند بطور اتوماتیک انجام بشه. و در ضمن اون ، بتونم مقدار باودریت رو کم و زیاد کنم.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  22. #16
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    اینکه چرا اون پورت رو نشون نداده من چیزی نمیدونم

    ولی در پروژه ای که انجام داده بودم، دقیقن همین کار رو کرده بودم که نرم افزار بصورت اتوماتیک دو پورت کام رو شناسایی میکرد و برنامه رو برای اونا ست میکرد. شیوه کار هم بدین صورت بود که هر پورت رو داده ای میفرستادم و در صورت دریافت پاسخ شناساییش میکردم...

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

  23. #17
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    اینکه چرا اون پورت رو نشون نداده من چیزی نمیدونم
    بیشتر روی این قسمت کار می کنم.

    شیوه کار هم بدین صورت بود که هر پورت رو داده ای میفرستادم و در صورت دریافت پاسخ شناساییش میکردم...
    مهندس جان اگه میشه این بحث رو باز کن. ضمن اینکه من چطور می تونم پورتی که روی باودریت 9600 شناسائی شده رو بطور اتوماتیک ست کنم روی مثلا 57600 !؟
    ویرایش توسط morteza_rk : 14-06-2012 در ساعت 18:51
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  24. #18
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    راستی بهانم جان شما توی پروژه ای که انجام داده بودی از مبدل COM to USB استفاده کرده بودی؟
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  25. #19
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    آقا یه نکته ی کنکوری!

    من روی مادربرد کامپیوترم یه پورت COM واقعی دارم. الان چک کردم ، دیدم وقتی خواصشو تغییر میدم (باودریت ، Parity ، Stop bit و ....) و بعدش میام از برنامه ی شما استفاده می کنم ،خواصی که توی برنامه نشون داده میشه همون خواص پیشفرض هست و هیچ تغییری نمی کنه!

    نکته ی دوم اینکه خواصی که برای هر 3 پورت نشون داده میشه کاملا مثل هم هست! اصلا با هم فرق ندارن.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  26. #20
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    من از مبدل usb به serial استفاده کردم. این رو بگم که این مبدل ها در پروژه های صنعتی و پروژه هایی که نیاز به کار زیاد دارند، اصــــــــــــــــلا قابل اطمینان نیستند! خیلی راحت از کار می افتند! داده نمیفرستند و...

    شما بیا باود ریت دیفالت درست کن به عنوان مثال 57600 و بریزش توی eeprom میکرو.

    برنامه وی بی میاد به پورتهای سریال وصل میشه، دستور دریافت باود ریت رو میفرسته (قابل تعریف توسط شما)

    در صورت درست باز شدن پورت، و باود صحیح، میکرو به دستور شما پاسخ میده و مقدار باود رو از eeprom میخونه و میفرسته! اینطر ی هم پورت رو پیدا کردی و باود رو.

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

    برای تنظیم مقدار باود هم کافیه که با برنامه به میکرو دستور تغییر بدی و اونم توی حافظش مقدار جدید رو بنویسه. و بعدش هم ریست سریال و کار با باود جدید...

صفحه 1 از 4 1234 آخرینآخرین

موضوعات مشابه

  1. ساخت چراغ اتوماتیک
    توسط espadana در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 11
    آخرين نوشته: 08-11-2013, 23:34
  2. شارژر اتوماتیک باتری اتومبیل
    توسط Ma3ood در انجمن الکترونیک
    پاسخ: 0
    آخرين نوشته: 23-09-2013, 12:46
  3. شارژر اتوماتیک
    توسط mapmap در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 13
    آخرين نوشته: 25-03-2013, 00:48
  4. برای زبان c++ و c از کجا می تونم طرز کار با پورتها رو یاد بگیرم؟
    توسط microweb در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 22
    آخرين نوشته: 30-05-2012, 14:23
  5. كليد پوش باتون 4 پايه
    توسط forghan در انجمن آموزش نرم افزارهای برق و الکترونیک
    پاسخ: 1
    آخرين نوشته: 08-06-2011, 15:02

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

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •