PDA

View Full Version : گفتگو: چگونگی ارتباط میکرو با pc از روی LAN



ب- تات
سه شنبه 11 خرداد 1389, 06:49 صبح
تا به امروز بیشتر در مورد ارتباط میکرو و pc بیشتر توسط پورت سریال بحث شده اما حالا می خواهیم در مورد ارتباط این 2 وسیله با پروتکل UDP یا TCP تبادل نظر کنیم . لطفا دوستانی که در این مورد اطلاعات عملی دارن نظرات و راهکارهای خودشون رو اعلام کنند.

ب- تات
چهارشنبه 12 خرداد 1389, 10:34 صبح
عجب......
یعنی واقعا هیچ کسی تا حالا در این مورد فعالیت یا اطلاعاتی نداره. ؟؟؟؟ بعید میدونم. نکنه سرور فروم down شده که هیچ کسی به این مطلب پاسخ نمیده (البته امیدوارم سرور برنامه نویس 120 سال Up UP باشه.)

farzadsw
چهارشنبه 12 خرداد 1389, 11:30 صبح
خودم به صورت عملي كار نكردم ، ولي اگه شما ميخوايد كار كنيد ، ميتونيد از ENC28J60 استفاده كنيد .
با پروتكل spi به هر ميكرويي وصل ميشه . اطلاعات بيشترش رو ميتونيد از ديتاشيتش پيدا كنيد.

Mehran.GH
چهارشنبه 12 خرداد 1389, 13:15 عصر
ببین دوست من , ابزارها و کد های زیادی برای ارتباط از طریق TCP وجود دارد اما بعضی مفاهیم پایه ای هست که باید حتما بدانید تا دید طراحی داشته باشید یعنی اگر پروژه ای دارید و می خواهید از شبکه Lan اطلاعاتی را منتقل کنید با دانستن این مفاهیم پایه ای می توانید انتخاب مناسب را انجام دهید.

یک مفهوم پایه ای موضوع Stack یا همان پشته است.

بر اساس استاندار ISO/OSI یک تعریف مشخصی برای ارتباط در شبکه وجود دارد که تولید کنندگان سخت افزار و برنامه نویسان بر آن اساس کار می کند و در صورتی که بخواهید کدهای آماده را استفاده کنید و کد را بفهمید باید بدانید چه اتفاقی پشت صحنه می افتد.

stack به زبان ساده همان چیزی است که در دروس دانشگاهی هم در معماری کامپوتر و یا دروس مشابه وجود دارد و در حقیقت قرار دادن و برداشتن اطلاعات به صورتی ترتیبی یا POP , PUSH است

چرا این روش؟

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

در این حالت تهیه کننده نرم افزار دیگر لازم نیست غصه بخورد که با آمدن روشهای جدید باید کل سیستم عامل را مثلا از اول بنویسد بلکه می داند چیزی که می تواند انتظار داشته باشد یک استک است که دیتا را به ترتیب می تواند از آن بخواند.

بعد یک لایه بالاتر از سخت افزار می آییم که IP پروتکل است و بعد لایه سوم TCP که در مجموع TCP/IP نامیده می شوند و .....

http://archive.electronicdesign.com/files/29/4907/figure_01.gif




حالا در مورد ارتباط بین میکرو و Pc یا ارتباط بین میکرو با میکرو

کاری که باید انجام شود نوشتن نرم افزار در میکرو است که این ساختار stack را تحقق بخشد که البته همانطور که در ابتدا نوشتم این کار انجام شده اما به دلایلی که توضیح می دهم باید آگاهانه انتخاب شود.

مساله اصلی بحث منابعی است که در یک میکرو قابل استفاده است یعنی قدرت پردازنده , حافظه بحث اینتراپتها و .... وقتی شما بخواهید از یک میکرو کوچک برای ارتباط از طریق شبکه استفاده کنید عملا تمامی قدرت پردازنده را مشغول این کار می کنید و در محیط صنعتی قابل اطمینان نیست.

البته یک راه حل این است که از چیپهایی که در بازار هست و از یک طرف کابل شبکه را متصل می کنید و از طرف دیگر از روش ارتباط سریال به میکرو وصل می شود و تمامی بار برقراری ارتباط بر دوش این چیپ است که در حقیقت خودش یک میکرو برای این منظور است که این روش هم مزایا و معایب خود را دارد و در یک طراحی باید بسته به پروژه راجع بهش بررسی کرد.

نکته مهم که بنظرم در طراحی روشهای ارتباطی در ایران دقت نمی شود موضوع مهم هرم انتقال داده در محیط صنعتی است که شکل آن را می بینید

http://s1.postimage.org/CZUAS.jpg (http://www.postimage.org/image.php?v=gxCZUAS)

در یک محیط صنعتی واقعی پایینترین لایه که همان سنسورها و ... هستند برای ارتباط از روشهایی همانند روش 4 و 20 میلی آمپر و RS485 و... استفاده می کنند که توانایی تحمل نویز و شرایط محیطی را داشته باشند

یک لایه بالاتر PLC ها یا مثلا میکرو کنترلراست که از روشهای Asi-Bus Devicenet SDS یا در خودرو سازی و صنایع هوایی CanBus و ... استفاده می شود و یا برای کاربردهای ساده LinBus

یک لایه بالاتر که PlC باید اطلاعات را به یک PC صنعتی مثلا در یک واحد پالایشگاه بفرستد که Filedbus , Profibus LON و .....

یک لایه بالاتر که دیتا مثلا از هر کدام از واحدهای پالایشگاه باید به سرور مرکزی انتقال داده شود که در این روش Ethernet یا همان TCP به کار می رود .

البته بدیهی است که مثلا ممکن است همان لایه دوم یعنی میکروها را با TCP به هم متصل کنید و کار هم بکند اما روش طراحی مناسب نیست یک دلیل اینکه Ethernet برای انتقال داده در این بخش که دیتای کم حجم اما پرتعداد باید منتقل شود کارایی لازم را ندارد

و یا برای ارتباط بین Pc واحدها به سرور اصلی بیاییم از ارتباط سریال استفاه کنیم!!

خلاصه اینکه این داستان طولانی است و ده ها مورد مثال می توانم برایتان بزنم از اشتباهاتی که در صنعت انجام شده در انتخاب نا مناسب روش ارتباطی که به ضرر و خسارت منجر شده.

بنابراین پیشنهاد می کنم همیشه یک دید طراحی از بالا داشته باشید High Level Design و بعد ابزار را انتخاب کنید.

در آخر هم بگم که بدلیل اینکه در محیطهای صنعتی مرتب حجم اطلاعاتی که باید در لایه های پایینی منتقل شود زیاد می شود اخیرا روشی در حال اجرایی شدن است با نام Real-Time Ethernet البته ایده جدید نیست اما تا حالا نیازی به اجرایی شدنش نبوده
اگر مایل بودی روی یک موضوع درست حسابی! کار کنی این موضوع را پیشنهاد می کنم . یک Real-Time Ethernet را روی لینوکس پیاده سازی کنی جالب خواهد بود.

ب- تات
یک شنبه 16 خرداد 1389, 08:31 صبح
یک سری به این لینک بزنید. من یکی از محصولاتش به نام EM100 رو خریداری کردم و توسط اون نتایج جالبی گرفتم که در صورت تمایل عرض میکنم.

http://tibbo.com/products

Mehran.GH
یک شنبه 16 خرداد 1389, 18:47 عصر
البته انتخاب ابزار به پروژه خودت بستگی داره فقط چند نکته پیشنهادی اینکه :

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

مثلا وضعیت خاموش روشن بودن رله و از این کارها ولی اگر پردازش داشته باشی یا پارامترهای کنترلری بخواهی بفرستی یا کد کردن و این جور کارها به نظرم مناسب نباشد .

من پیشنهاد می کنم تا جایی که در طراحی پروژه برایت مقدور بود گلوگاه در انتقال داده ایجاد نکنی و مثلا به جای ارتباط سریال عادی از SPI استفاده کنی یعنی چیپی که دوستمون farzadsw معرفی کرد ENC28J60

این چیپ با کمک روش ارتباط SPI تا کلاک Mhz 20 می توانی تعریف کنی و از طرف شبکه هم یک کارهایی مثل Multicast address و Group destination addresses و Packet Filtering دارد که البته شاید این EM100 هم داشته باشد من دقیق مشخصاتش را ندیدم اما ENC28J60 ظاهرا کارایی بیشتری دارد .

البته اگر فقط همان وضعیت رله را بخواهی انتقال دهی که همان EM100 باید کافی باشد.

اینها هم لینکهای پروژه های کامل انجام شده در این مورد که شاید بدرد خورد :

http://www.roland-riegel.de/mega-eth/
http://www.harbaum.org/till/spi2cf/index.shtml
http://www.sics.se/~adam/uip/index.php/Main_Page
http://www.cesko.host.sk/IgorPlugUDP/IgorPlug-UDP%20%28AVR%29_eng.htm

تجربه خودت را هم حتما اینجا بنویس اگر این چیپ را استفاده کردی چه مزایایی داشت و اگر نکردی به چه دلیل بوده و چه معایبی به نظرت داشته تا برای کسانی که در آینده می خواهند همین ابزار را استفاده کنند مفید باشد .

aliila
سه شنبه 01 تیر 1389, 08:11 صبح
اون آي سي هاي كه تو بالا مطرح شد كلا فاتحه براشون بخونين حالا ميكرو 32 بيتي arm ارزون ترينش مال شركت اتمل سري arm7x به قيمت 8 تومن چند ده مورد امكان ارتباط داره كه يكيش lan است و لينوكس روش نصب ميشه و با c++ برنامه براش مي نويسن

farzadsw
سه شنبه 01 تیر 1389, 17:10 عصر
اون آي سي هاي كه تو بالا مطرح شد كلا فاتحه براشون بخونين حالا ميكرو 32 بيتي arm ارزون ترينش مال شركت اتمل سري arm7x به قيمت 8 تومن چند ده مورد امكان ارتباط داره كه يكيش lan است و لينوكس روش نصب ميشه و با C++‎ برنامه براش مي نويسن
اینطوری که شما میگید نیست .
at91sam7x لایه ی فیزیکی شبکه رو نداره ، بنابراین به یه ic دیگه برای لایه فیزیکی نیاز هست .
روی هسته arm7 نمیشه لینوکس نصب کرد (mmu نداره) . arm9 و بالاتر ازاون این قابلیت رو دارن.

البته در کل امکاناتی که میکرو کنترلر های arm دارن ، نسبت به قیمتشون خیلی عالیه اما از طرفی کار باهاشون ساده نیست و برای افراد مبتدی مناسب نیستن . بنابراین وقتی سادگی و سرعت توسعه نرم افزار در درجه اول باشه (نمونه بارزش پروژه های دانشجویی ) میکروهای avr هنوز هم بیشترین استفاده رو دارن.