PDA

View Full Version : سوال: پورت سریال در MFC یا CLR !



Hadi.Nasiri
یک شنبه 11 مرداد 1388, 20:17 عصر
سلام
مقاله خوبی بود، مرسی
راستش چند تا سوال به ذهنم رسید که تو اون مقاله جوابی براشون پیدا نکردم، ممنون میشم اگه جواب بدید:
1) هدف من از کد نویسی با VC++ بیشتر مانیتورینگ و کنترل سیستم های میکروکنترلیه و خوب واسه این کارا دقت و سرعت بالایی نیاز نیست. به خاطر اینکه بیشتر از 3 ساله با Basic کار نکردم اصلا دوست ندارم سراغ VB برم، حوصله یادگرفتن #C رو هم ندارم.اصلی ترین سوال من اینکه به نظر شما آیا کار با پورت سریال تو MFC راحته یا برم سراغ CLR ؟(راستش از مقاله ای که واسه کد نویسی تو MFC برای سریال پورت معرفی کردید چیزی سر در نیاوردم:ناراحت:)
2) ظاهرا برای اینکه از کد نویسی برای پورت سریال خلاص بشم مجبورم MFC رو رها کنم و به سمت CLR (یا همون .NET ) یا کد نویسی تلفیقی برم. اگه تا اینجاشو درست فهمیده باشم حالا واسه شروع کار با .NET تو VC++ چه کتاب فارسی رو پیشنهاد می کنید ؟ (تو پست کتاب های پیشنهادیتون چیزی واسه .NET ندیدم)
3) منظور از برنامه نویسی تلفیقی کدوم نوعه(CLR/Console Application یا ATL یا General یا ...) و آیا یادگیریش سخته ؟
با کمال پررویی ممنون میشم اگه لطف کنید و جواب 3 سوالمو جدا جدا بدید :خجالت:

habibetaheri
دوشنبه 12 مرداد 1388, 11:46 صبح
سلام
من به کمک همین سایت پورت سریال کار کردم خیلی خیلی راحت بود . لینکش دادم
http://barnamenevis.org/forum/showthread.php?t=150260
موفق باشید

Hadi.Nasiri
دوشنبه 12 مرداد 1388, 23:57 عصر
سلام دوست عزیز
بابت راهنماییتون ممنون
منم مثل شما الکترونیک خوندم و با VC++ هم خیلی کار نکردم راستش تازه شروع کردم.تنها مشکلم ارتباط با RS232 که امبدوارم با کمک شما و دیگز دوستان حل بشه.
راستش من یه سر به http://www.codeguru.com/cpp/com-tech/activex/misc/print.php/c7349 زدم، مثال جالب و کاملی داشت ولی مشکل من اینکه مراحلی که تو مثال برای ایجاد پروژه طی کرده با Visual Studio من فرق داره. مثلا تو منوی project من گزینه add to project نیست. من از ورژن 2008 استفاده می کنم. بد جوری گیج شدم. ممنون میشم اگه بیشتر راهنماییم کنید.

Nima_NF
سه شنبه 13 مرداد 1388, 01:26 صبح
این کنترل که در لینک فوق استفاده می شود، یک کمپوننت Visual Studio 6 هست و همراه آن نصب می شود و در حالت عادی در ++visual C نسخه های جدید وجود ندارد. لذا توصیه می کنم که از آن استفاده نکنید.

چند پیشنهاد دارم:
1- اگر دنبال کمپوننت ها و امکانات آماده هستید، کلا برنامه نویسی ++C را کنار بگذارید و به سراغ #C یا هر زبان برنامه نویسی تحت .NET بروید.

یا
2- در کنار همان برنامه نویسی C++/MFC به مطالعه C++/CLI از کتاب زیر بپردازید یا مقاله برنامه نویسی تلفیقی کنترل های .NET در MFC در "نسخه اول مجله برنامه نویس"را مطالعه کنید. (که همان قدر مانند #C باید وقت بگذارید)
کتاب: Beginning Visual C++ 2008 - Ivor Horton

یا
3- کلا کمپونت های آماده را فراموش کنید و با کدنویسی که در تاپیک قبل معرفی کردم و تنها با API های موجود برای ++C کارها را انجام دهید و از com بخوانید.

یا
4- بگردید، شاید کپوننت های تجاری در اینترنت برای استفاده وجود داشته باشد.

پاورقی: ضمنا لطفا در صورتی که سوالات شما مرتبط به یک موضوع مشخص هست، تنها در یک تاپیک به آن ها بپردازید (همانند همین تاپیک) و تاپیک جدید دیگری باز نکنید.

Nima_NF
سه شنبه 13 مرداد 1388, 01:37 صبح
ولی مشکل من اینکه مراحلی که تو مثال برای ایجاد پروژه طی کرده با Visual Studio من فرق داره. مثلا تو منوی project من گزینه add to project نیست. من از ورژن 2008 استفاده می کنم.در هر حال، جواب این سوال:
در VC++2008 در MFC ، به نمای طراحی دیالوگ بروید و راست کلیک کنید و گزینه Insert ActiveX control را انتخاب کنید.


در پایان هم یک نمونه مثال برای خواندن از Com توسط یک سایت سخت افزار :
http://www.ontrak.net/mfc.htm

و یک نمونه سورس مثال فایل Zip برای RS232 در :
http://www.taltech.com/freesoftware/SER2416B.htm

Hadi.Nasiri
یک شنبه 18 مرداد 1388, 17:46 عصر
سلام دوستان واسه راهنمایی های خوبتون ممنونم راستش من مثال http://www.codeguru.com/cpp/com-tech/activex/misc/print.php/c7349 رو نگاه کردم، متوجه شدم چیکار کرده و فایل Zip شده پروژه رو هم که Upload کرده، برداشتم و خودم کامپایلش کردم. بدون هیچ مشکلی Build شد و فایل exe خروجیشم کاملا درست کار می کنه. حالا تصمیم گرفتم خودم برنامه رو طبق نمونه یکبار دیگه بنویسم(تو Visual Studio 2008) . دقیقا مراحلی روکه گفته بود رفتم ولی در نهایت با 10 Error مواجه شدم ولی نتونستم خطایابی کنم. اینم خطاهاش:

1>.\SerialView.cpp(61) : error C2039: 'SetCommPort' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(62) : error C2039: 'SetSettings' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(63) : error C2039: 'SetInputLen' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(64) : error C2039: 'SetInputMode' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(65) : error C2039: 'SetRTSEnable' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(66) : error C2039: 'SetRThreshold' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(67) : error C2039: 'SetPortOpen' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(98) : error C2039: 'SetOutput' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(108) : error C2039: 'GetCommEvent' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(111) : error C2039: 'GetInput' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'

راستی متغییر هاشم مطمئنم درست تعریف کردم.(از رو پروژه اصلی نگاه کردم). چون حجم برنامه زیاد فقط کد برنامه رو میزارم.(فلیل zip)

ممنون میشم کمکم کنید.

habibetaheri
یک شنبه 18 مرداد 1388, 18:25 عصر
من فکر می کنم شما متغیر رو تعریف نمی کنید
برید توی classWizard و از اونجا member variable و سپس add variable انتخاب کنید و یه متغیر به اسم m_comm از نوع کنترل تعریف کنید و سپس ران کنید
باید مشکلتون حل بشه .
پورت سریال رو برای چه کاری می خواید ؟

Hadi.Nasiri
سه شنبه 20 مرداد 1388, 11:39 صبح
سلام آقای طاهری
اگه متظورتون متغیر واسه IDC_MSCOMM1 اتفاقا چرا، یه متغیر کنترلی به نام m_comm تعریف کردم ( public ) و (Variable Type: CMscomm1) ولی اونجایی که باید Header File و فایل .cpp رو معرفی کتم، بعد از یکبار معرفی و زدن دکمه Finish دفعه بعد که می خوام متغیر IDC_MSCOMM1 رو ببینم جای Header File و فایل .ccp خالیه و انگار قبلا معرفیشون نکردم !
همونطوری که قبلا گفتم خیلی راحت اون پروژه ه ای روکه دانلود کردم تونستم build کنم بدون هیچ مشکلی ولی وقتی خواستم خودم بنویسم 10 تا Error داد.
شما خودتون این برنامه رو دوباره نویسی کردید تا ببینید جواب میده یا نه ؟
آیا ممکنه نیاز به اضافه کردن فایل خاصی به پوشه برنامه باشه ؟
راستش بد جوری اعصابمو خورد کرده نمی دونم باید چیکارش کنم. منم مثل شما الکترونبک خوندم و پورت سریال رو برای مانیتورینگ و کنترل سیستم های میکروکنترلری نیاز دارم.
ممنون میشم کمکم کنید.

habibetaheri
سه شنبه 20 مرداد 1388, 12:39 عصر
اونجایی که باید Header File و فایل .cpp رو معرفی کتم، بعد از یکبار معرفی و زدن دکمه Finish دفعه بعد که می خوام متغیر IDC_MSCOMM1 رو ببینم جای Header File و فایل .ccp خالیه و انگار قبلا معرفیشون نکردم !
.
منظورتون رو متوجه نشدم . فقط کلاس CFORM رو انتخاب کنید و
Select "IDD_Serial_Form" under "Dialog" on the "Resources View" tab
نیاز به اضافه کردن هیچ فایلی نیست
من قبلا همین رو خودم برنامه نویسی کردم با VC++6 جواب هم گرفتم .یه بار دیگه هم دوباره الان امتحان کردم مشکلی نداشت.
10 تا ارور یعنی هر کدوم از توابعی رو که استفاده کردید نمی تونه بشناسه . این توابع به متغیر m_comm نسبت داده می شه اگه این متغیر درست تعریف نشده باشه ، طبیعیه که 10 تا ارور می ده . چون 10 تا تابع استفاده کردید 10 تا ارور میده . ولی مشکلش فقط نشناختن متغیره
خیلی با دقت همه مراحل انجام بدید نباید مشکلی باشه
یه سوال الکترونیکی .امیدوارم خلاف قوانین سایت نباشه . شما در مورد apr9600 ,isd4004 (آی سی صدا ) اطلاعاتی دارید ؟
موفق باشید

Hadi.Nasiri
چهارشنبه 21 مرداد 1388, 21:46 عصر
ممنون بابت راهنماییتون
مشکل من تفاوت شکل دستورا بود که حل شد. مثلا تو ورژن Studio من باد
(m_comm.put_InputLen(1 باشه ولی تو مثال سایت m_comm.SetInput بود.
اما سوالتون در مورد isd4004 ، تا حالا خودم راش ننداختم ولی فکر نکنم مشکل خاصی داشته باشه، احتمالا ارتباظش SPI و دیتاشیت نسبتا کاملی داره.
شما تو کد نویسیش مشکل دارید ؟(امیدوارم پاسخ به این سوال برخلاف قوانین سایت نباشه)

habibetaheri
پنج شنبه 22 مرداد 1388, 15:39 عصر
خدا رو شکر که مشکلتون حل شد . از چیز مهمی جواب گرفتید .
مشکل من توی کد نویسیه. صدایی رو که ضبط کردی برای پخش اون باید آدرس خونه ای از حافظه که صدا توی اون ذخیره شده رو بهش بدی تا صدا رو پخش کنه . این کارو میکرو باید انجام بده .حالا من نمی دونم چه جوری ؟؟؟؟؟
از سخت افزاری هم ولتاژ خازن ها رو نمی دونم ولی به احتمال قوی باید همون 50 ولت باشه .

leili7107
سه شنبه 07 مهر 1388, 15:39 عصر
سلام
من می خوام با پورت سریال کار کنم و از کتابخانه ComPort استفاده کردم.
آیا برای دسترسی به متد ها مانند Open (برای باز کردن پورت) باید شی ایجاد کنم؟
اگر باید شی ایجاد کنم لطفا دستورش را بگید در غیر این صورت چه جوری می تونم به متدها دسترسی پیدا کنم؟
ممنون:لبخندساده:

leili7107
جمعه 10 مهر 1388, 13:52 عصر
سوال من مربوط به این تاپیک نیست که کسی جواب نمیده؟:ناراحت:
من باید تاپیک جدید باز می کردم؟

leili7107
دوشنبه 09 آذر 1388, 02:10 صبح
سلام به همه دوستان
من تونستم برنامه ای پیدا کنم که به صورت دستی فایل کتابخانه comport.dll را برای دسترسی به پورت سریال باز میکند و آن را به برنامه اضافه می کند.برنامه Mfc هست و من نمیدونم چه جوری می تونم از توابع این کتابخانه استفاده کنم.
کسی می تونه به من کمک کنه که بتونم اطلاعات را از پورت بخوانم و به پورت بفرستم؟
آیا باید شی بسازم تا بتوانم از توابع استفاده کنم؟